home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / 4000test.s next >
Text File  |  1995-04-01  |  147KB  |  10,220 lines

  1.  
  2.  
  3. FILTER    macro
  4.     bchg    #1,$bfe001
  5.     endm
  6.  
  7. BLACK    macro
  8.     move.w    #0,$dff180
  9.     endm
  10.  
  11. RED    macro
  12.     move.w    #$f00,$dff180
  13.     endm
  14.  
  15. GREEN    macro
  16.     move.w    #$0f0,$dff180
  17.     endm
  18.  
  19. BLUE    macro
  20.     move.w    #$f,$dff180
  21.     endm
  22.  
  23.  
  24.     opt    P=68020,D+,LINE
  25.  
  26.     include include:hardware/intbits.i
  27.  
  28. CD32VER equ 1
  29.  
  30. maxscrdiv EQU 8
  31. max3ddiv EQU 5
  32. playerheight EQU 12*1024
  33. playercrouched EQU 8*1024
  34. scrheight EQU 80
  35.  
  36. ; k/j/m
  37.  
  38. ; 4/8
  39. ; s/x
  40. ; b/n
  41.  
  42. midoffset EQU 104*4*40
  43.  
  44.  
  45.  SECTION Scrn,CODE
  46. OpenLib       equ -552
  47. CloseLib      equ -414
  48.  
  49. INTREQ        equ    $09C
  50. INTENA        equ    $09A
  51. INTENAR    equ    $01C
  52. DMACON        equ    $096
  53.  
  54. SERPER        equ    $032
  55. SERDATR    equ    $018
  56. SERDAT        equ    $030
  57. vhposr        equ $006    
  58. vhposrl    equ $007 
  59.  
  60. bltcon0    equ $40 
  61. bltcon1    equ $42
  62. bltcpt        equ $48
  63. bltbpt        equ $4c
  64. bltapt        equ $50
  65. spr0ctl    equ $142
  66. spr1ctl    equ $14a
  67. spr2ctl    equ $152
  68. spr3ctl    equ $15a
  69. spr4ctl    equ $162
  70. spr5ctl    equ $16a
  71. spr6ctl    equ $172
  72. spr7ctl    equ $17a
  73. spr0pos    equ $140
  74. spr1pos    equ $148
  75. spr2pos    equ $150
  76. spr3pos    equ $158
  77. spr4pos    equ $160
  78. spr5pos    equ $168
  79. spr6pos    equ $170
  80. spr7pos    equ $178
  81. bltdpt         equ $54
  82. bltafwm    equ $44
  83. bltalwm    equ $46
  84. bltsize         equ $58
  85. bltcmod         equ $60
  86. bltbmod         equ $62
  87. bltamod         equ $64
  88. bltdmod         equ $66
  89. diwstart        equ $8e         ; Screen hardware registers.
  90. diwstop         equ $90
  91. ddfstart        equ $92
  92. ddfstop         equ $94
  93. bplcon0         equ $100
  94. bplcon1         equ $102
  95. col0            equ $180
  96. col1            equ $182
  97. col2        equ $184
  98. col3        equ $186
  99. col4        equ $188
  100. col5        equ $18a
  101. col6        equ $18c
  102. col7        equ $18e
  103. col8            equ $190
  104. col9            equ $192
  105. col10           equ $194
  106. col11           equ $196
  107. col12           equ $198
  108. col13           equ $19a
  109. dmacon        equ $96
  110. dmaconr        equ $002
  111. intenar        equ $01c
  112. intena        equ $09a
  113. intreq        equ $09c
  114. intreqr        equ $01e
  115. intreqrl    equ $01f
  116. bpl1pth         equ $e0
  117. bpl1ptl         equ $e2
  118. bpl2pth        equ $e4
  119. bpl2ptl        equ $e6
  120. bpl3pth        equ $e8
  121. bpl3ptl        equ $ea
  122. bpl4pth        equ $ec
  123. bpl4ptl        equ $ee
  124. bpl5pth        equ $f0
  125. bpl5ptl        equ $f2
  126. bpl6pth        equ $f4
  127. bpl6ptl        equ $f6
  128. bpl7pth        equ $f8
  129. bpl7ptl        equ $fa
  130. bpl8pth        equ $fc
  131. bpl8ptl        equ $fe
  132. spr0pth        equ $120
  133. spr0ptl        equ $122
  134. spr1pth        equ $124
  135. spr1ptl        equ $126
  136. spr2pth        equ $128
  137. spr2ptl        equ $12a
  138. spr3pth        equ $12c
  139. spr3ptl        equ $12e
  140. spr4pth        equ $130
  141. spr4ptl        equ $132
  142. spr5pth        equ $134
  143. spr5ptl        equ $136
  144. spr6pth        equ $138
  145. spr6ptl        equ $13a
  146. spr7pth        equ $13c
  147. spr7ptl        equ $13e
  148.  
  149. ; move.l #length,d0
  150. ; moveq.l #2,d1    ; chipmem
  151. ; move.l 4.w,a6
  152. ; jsr allocmem(a6) = -198
  153.  
  154. ; tst.l d0
  155. ; beq.s ohbugger
  156. ; move.l d0,memaddr
  157.  
  158.  
  159. ; move.l 4.w,a6
  160. ; move.l memaddr,a1
  161. ; move.l #size,d0
  162. ; jsr freemem(a6) =-210
  163.  
  164.  
  165. ** This waits for the blitter to finish before allowing program
  166. ** execution to continue.
  167.  
  168.  
  169.  include "ab3:source/protsetupdecode"
  170.  
  171. SAVEREGS MACRO
  172.  movem.l d0-d7/a0-a6,-(a7)
  173.  ENDM
  174.  
  175. GETREGS MACRO
  176.  movem.l (a7)+,d0-d7/a0-a6
  177.  ENDM
  178.  
  179.  
  180. WB MACRO
  181. \@bf:
  182.  btst #6,dmaconr(a6)
  183.  bne.s \@bf
  184.  ENDM
  185.  
  186. WBa MACRO
  187. \@bf:
  188.  move.w #\2,$dff180
  189.  
  190.  btst #6,$bfe001
  191.  bne.s \@bf
  192. \@bz:
  193.  
  194.  move.w #$f0f,$dff180
  195.  
  196.  btst #6,$bfe001
  197.  beq.s \@bz
  198.  
  199.  ENDM
  200.  
  201. *Another version for when a6 <> dff000
  202.  
  203. WBSLOW MACRO
  204. \@bf:
  205.  btst #6,$dff000+dmaconr
  206.  bne.s \@bf
  207.  ENDM
  208.  
  209. WT MACRO
  210. \@bf:
  211.  btst #6,(a3)
  212.  bne.s \@bd
  213.  rts
  214. \@bd: 
  215.  btst #4,(a0)
  216.  beq.s \@bf
  217.  ENDM
  218.  
  219. WTNOT MACRO
  220. \@bf:
  221.  btst #6,(a3)
  222.  bne.s \@bd
  223.  rts
  224. \@bd: 
  225.  btst #4,(a0)
  226.  bne.s \@bf
  227.  ENDM
  228.  
  229. **
  230.  
  231.  include "macros.i"
  232.  include "ab3:source/defs.i"
  233.  
  234.  move.w (a0)+,mors
  235.  
  236.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  237.  move.w intenar(a6),_storeint
  238.  and.w #$c000,_storeint
  239.  
  240. ; move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  241.  
  242.  st GOURSEL
  243.  
  244.  
  245.  clr.b PLR1KEYS
  246.  clr.b PLR1PATH
  247.  clr.b PLR1MOUSE
  248.  st PLR1JOY
  249.  clr.b PLR2KEYS
  250.  clr.b PLR2PATH
  251.  clr.b PLR2MOUSE
  252.  st PLR2JOY
  253.  
  254.  PRSDO
  255.  
  256.  move.l #2,d1    
  257.  move.l #10240*2,d0
  258.  move.l 4.w,a6
  259.  jsr -198(a6)
  260.  move.l d0,TEXTSCRN
  261.  move.w d0,TSPTl
  262.  swap d0
  263.  move.w d0,TSPTh
  264.  
  265.  move.l #nullspr,d0
  266.  move.w d0,txs0l
  267.  move.w d0,txs1l
  268.  move.w d0,txs2l
  269.  move.w d0,txs3l
  270.  move.w d0,txs4l
  271.  move.w d0,txs5l
  272.  move.w d0,txs6l
  273.  move.w d0,txs7l
  274.  swap d0
  275.  move.w d0,txs0h
  276.  move.w d0,txs1h
  277.  move.w d0,txs2h
  278.  move.w d0,txs3h
  279.  move.w d0,txs4h
  280.  move.w d0,txs5h
  281.  move.w d0,txs6h
  282.  move.w d0,txs7h 
  283.  
  284.  move.l #1,d1    
  285.  move.l #120000,d0
  286.  move.l 4.w,a6
  287.  jsr -198(a6)
  288.  move.l d0,LEVELDATA
  289.  
  290.  jsr START
  291.  
  292.  rts
  293.  
  294. _storeint
  295.     dc.w 0
  296.  
  297. * Load level into buffers.
  298.  clr.b doanything
  299.  
  300. ; DRAW TEXT SCREEN
  301.  
  302. TWEENTEXT:
  303.  
  304.  move.l #LEVELTEXT,a0
  305.  move.w PLOPT,d0
  306.  muls #82*16,d0
  307.  add.l d0,a0
  308.  
  309.  move.w #14,d7
  310.  move.w #0,d0
  311. DOWNTEXT:
  312.  move.l TEXTSCRN,a1
  313.  jsr DRAWLINEOFTEXT
  314.  addq #1,d0
  315.  add.w #82,a0
  316.  dbra d7,DOWNTEXT
  317.  rts
  318.  
  319. FONTADDRS:
  320.  dc.l ENDFONT0,CHARWIDTHS0
  321.  dc.l ENDFONT1,CHARWIDTHS1
  322.  dc.l ENDFONT2,CHARWIDTHS2
  323.  
  324. ENDFONT0:
  325.  incbin "endfont0"
  326. CHARWIDTHS0:
  327.  incbin "charwidths0"
  328. ENDFONT1:
  329.  incbin "endfont1"
  330. CHARWIDTHS1:
  331.  incbin "charwidths1"
  332. ENDFONT2:
  333.  incbin "endfont2"
  334. CHARWIDTHS2:
  335.  incbin "charwidths2"
  336.  
  337.  even
  338.  
  339. DRAWLINEOFTEXT:
  340.  movem.l d0/a0/d7,-(a7)
  341.  
  342.  muls #80*16,d0
  343.  add.l d0,a1    ; screen pointer
  344.  
  345.  move.l #FONTADDRS,a3
  346.  moveq #0,d0
  347.  move.b (a0)+,d0
  348.  move.l (a3,d0.w*8),a2
  349.  move.l 4(a3,d0.w*8),a3
  350.  
  351.  moveq #0,d1    ; width counter:
  352.  move.w #79,d6
  353.  tst.b (a0)+
  354.  beq.s NOTCENTRED
  355.  moveq #-1,d5
  356.  move.l a0,a4
  357.  moveq #0,d2
  358.  moveq #0,d3
  359.  move.w #79,d0    ; number of chars
  360. .addup:
  361.  addq #1,d5
  362.  move.b (a4)+,d2
  363.  move.b -32(a3,d2.w),d4
  364.  add.w d4,d3
  365.  cmp.b #32,d2
  366.  beq.s .DONTPUTIN
  367.  move.w d5,d6
  368.  move.w d3,d1
  369. .DONTPUTIN:
  370.  dbra d0,.addup
  371.  asr.w #1,d1
  372.  neg.w d1
  373.  add.w #320,d1    ; horiz pos of start x
  374.  
  375. NOTCENTRED:
  376.  move.w d6,d7
  377. DOACHAR:
  378.  moveq #0,d2
  379.  move.b (a0)+,d2
  380.  sub.w #32,d2
  381.  moveq #0,d6
  382.  move.b (a3,d2.w),d6
  383.  asl.w #5,d2
  384.  lea (a2,d2.w),a4    ; char font
  385. val SET 0
  386.  REPT 16
  387.  move.w (a4)+,d0
  388.  bfins d0,val(a1){d1:d6}
  389. val SET val+80
  390.  ENDR
  391.  add.w d6,d1
  392.  dbra d7,DOACHAR
  393.  movem.l (a7)+,d0/a0/d7
  394.  rts 
  395.  
  396.  
  397. CLRTWEENSCRN:
  398.  move.l TEXTSCRN,a0
  399.  move.w #(10240/16)-1,d0
  400.  move.l #$0,d1
  401. .lll
  402.  move.l d1,(a0)+
  403.  move.l d1,(a0)+
  404.  move.l d1,(a0)+
  405.  move.l d1,(a0)+
  406.  move.l d1,(a0)+
  407.  move.l d1,(a0)+
  408.  move.l d1,(a0)+
  409.  move.l d1,(a0)+
  410.  dbra d0,.lll
  411.  rts
  412.  
  413. PLAYTHEGAME:
  414.  
  415.  move.w #0,TXTCOLL
  416.  
  417.  bsr CLRTWEENSCRN
  418.  
  419.  cmp.b #'n',mors
  420.  bne.s .notext
  421.  bsr TWEENTEXT
  422. .notext
  423.  
  424.  move.l #TEXTCOP,$dff080
  425.  
  426.  move.w #$10,d0
  427.  move.w #7,d1
  428.  
  429. .fdup
  430.  move.w d0,TXTCOLL
  431.  add.w #$121,d0
  432. .wtframe:
  433.  btst #5,$dff000+intreqrl
  434.  beq.s .wtframe
  435.  move.w #$0020,$dff000+intreq
  436.  dbra d1,.fdup
  437.  
  438.  jsr INITCOPPERSCRN
  439.  
  440. ; Get level memory.
  441.  
  442.  move.l #1,d1
  443.  move.l #50000,d0
  444.  move.l 4.w,a6
  445.  jsr -198(a6)
  446.  move.l d0,LEVELGRAPHICS
  447.  
  448.  move.l #1,d1
  449.  move.l #40000,d0
  450.  move.l 4.w,a6
  451.  jsr -198(a6)
  452.  move.l d0,LEVELCLIPS
  453.  
  454.  move.l #$dff000,a6
  455.  jsr SETPLAYERS
  456.  
  457. ; move.l #LEVELDATAD,LEVELDATA
  458. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  459. ; move.l #LEVELCLIPSD,LEVELCLIPS
  460.  
  461. ; bra noload
  462.  
  463.  move.l doslib,a6
  464.  move.l #LDname,d1
  465.  move.l #1005,d2
  466.  jsr -30(a6)
  467.  move.l d0,LDhandle
  468.  
  469.  move.l doslib,a6
  470.  move.l d0,d1
  471.  move.l LEVELCLIPS,d2
  472.  move.l #40000,d3
  473.  jsr -42(a6)
  474.  
  475.  move.l doslib,a6
  476.  move.l LDhandle,d1
  477.  jsr -36(a6)
  478.  
  479. *************************************
  480.     move.l    LEVELCLIPS,d0
  481.     moveq    #0,d1
  482.     move.l LEVELDATA,a0
  483.     lea    WorkSpace,a1
  484.     lea    $0,a2
  485.     jsr    unLHA
  486. *************************************
  487.  
  488. ********
  489.  
  490.  move.l doslib,a6
  491.  move.l #LGname,d1
  492.  move.l #1005,d2
  493.  jsr -30(a6)
  494.  move.l d0,LGhandle
  495.  
  496.  move.l doslib,a6
  497.  move.l d0,d1
  498.  move.l LEVELCLIPS,d2
  499.  move.l #40000,d3
  500.  jsr -42(a6)
  501.  
  502.  move.l doslib,a6
  503.  move.l LGhandle,d1
  504.  jsr -36(a6)
  505.  
  506. *************************************
  507.     move.l    LEVELCLIPS,d0
  508.     moveq    #0,d1
  509.     move.l LEVELGRAPHICS,a0
  510.     lea    WorkSpace,a1
  511.     lea    $0,a2
  512.     jsr    unLHA
  513. *************************************
  514.  
  515.  
  516. ********
  517.  
  518.  move.l doslib,a6
  519.  move.l #LCname,d1
  520.  move.l #1005,d2
  521.  jsr -30(a6)
  522.  move.l d0,LChandle
  523.  
  524.  move.l doslib,a6
  525.  move.l d0,d1
  526.  move.l #WorkSpace+16384,d2
  527.  move.l #16000,d3
  528.  jsr -42(a6)
  529.  
  530.  move.l doslib,a6
  531.  move.l LChandle,d1
  532.  jsr -36(a6)
  533.  
  534. *************************************
  535.     move.l    #WorkSpace+16384,d0
  536.     moveq    #0,d1
  537.     move.l LEVELCLIPS,a0
  538.     lea    WorkSpace,a1
  539.     lea    $0,a2
  540.     jsr    unLHA
  541. *************************************
  542.  
  543.  
  544. *******
  545.  
  546. noload:
  547.  
  548. ********
  549.  
  550. ; move.l doslib,a6
  551. ; move.l #Prefsname,d1
  552. ; move.l #1005,d2
  553. ; jsr -30(a6)
  554. ; move.l d0,Prefshandle
  555.  
  556. ; move.l doslib,a6
  557. ; move.l d0,d1
  558. ; move.l #Prefsfile,d2
  559. ; move.l #50,d3
  560. ; jsr -42(a6)
  561.  
  562. ; move.l doslib,a6
  563. ; move.l Prefshandle,d1
  564. ; jsr -36(a6)
  565.  
  566. *******
  567.  
  568.  cmp.b #'s',Prefsfile+2
  569.  seq STEREO
  570.  
  571.  IFNE CD32VER
  572.  move.l doslib,a6
  573.  move.l #115,d1
  574.  jsr -198(a6)
  575.  ENDC
  576.  
  577.  
  578.  move.l doslib,d0
  579.  move.l d0,a1
  580.  move.l 4.w,a6
  581.  jsr CloseLib(a6)
  582.  
  583.  move.l #$dff000,a6
  584.  move.w #$87c0,dmacon(a6)
  585.  move.w #$8020,dmacon(a6)
  586.  move.w intenar(a6),saveinters
  587.  move.w #$7fff,intena(a6)
  588.  move.w #$00ff,$dff09e
  589.  
  590. *** Put myself in supervisor mode
  591.  
  592.  bra blag
  593. ; move.l $6c,d0
  594. ; move.l #blag,$6c
  595. ; move.w #$8010,intreq(a6)
  596.  
  597.  rts
  598.  
  599. saveit: ds.l 10
  600. doslibname: dc.b 'dos.library',0
  601.  even
  602. doslib: dc.l 0
  603.  
  604. mors: dc.w 0
  605.  
  606. LDname: dc.b 'ab3d2:levels/level_'
  607. LEVA:
  608.  dc.b 'a/twolev.bin',0
  609.  even
  610. LDhandle: dc.l 0
  611. LGname: dc.b 'ab3d2:levels/level_'
  612. LEVB:
  613.  dc.b 'a/twolev.graph.bin',0
  614.  even
  615. LGhandle: dc.l 0
  616. LCname: dc.b 'ab3d2:levels/level_'
  617. LEVC:
  618.  dc.b 'a/twolev.clips',0
  619.  even
  620. LChandle: dc.l 0
  621.  
  622.     cnop    0,4
  623.  
  624. Prefsname: dc.b 'ram:prefs',0
  625.  even
  626. Prefshandle: dc.l 0
  627.  
  628. Prefsfile:
  629.  dc.b 'k4nx'
  630.  ds.b 50
  631.  
  632.  even
  633.  
  634.  cnop 0,4
  635.  
  636. VBLANKInt
  637.  dc.l 0,0
  638.  dc.b NT_INTERRUPT,100
  639.  dc.l Prefsname
  640.  dc.l 0
  641.  dc.l Chan0inter
  642.  
  643.  
  644. blag:
  645. ; move.w #$10,intreq(a6)
  646. ; move.l d0,$6c
  647. ; move.w #$7fff,intena(a6)
  648.  
  649. ; move.w #$20,$dff1dc
  650.  
  651.  move.l 4.w,a6
  652.  lea VBLANKInt(pc),a1
  653.  moveq #INTB_COPER,d0
  654.  jsr _LVOAddIntServer(a6)
  655.  
  656. ****************************
  657. * Initialize level
  658. ****************************
  659. * Poke all clip offsets into
  660. * correct bit of level data.
  661. ****************************
  662.  move.l LEVELGRAPHICS,a0
  663.  move.l 12(a0),a1
  664.  add.l a0,a1
  665.  move.l a1,ZoneGraphAdds
  666.  move.l (a0),a1
  667.  add.l a0,a1
  668.  move.l a1,DoorData
  669.  move.l 4(a0),a1
  670.  add.l a0,a1
  671.  move.l a1,LiftData
  672.  move.l 8(a0),a1
  673.  add.l a0,a1
  674.  move.l a1,SwitchData
  675.  adda.w #16,a0
  676.  move.l a0,ZoneAdds
  677.  
  678.  move.l LEVELDATA,a1
  679.  move.l 16+6(a1),a2
  680.  add.l a1,a2
  681.  move.l a2,Points
  682.  move.w 8+6(a1),d0
  683.  lea 4(a2,d0.w*4),a2
  684.  move.l a2,PointBrights
  685.  
  686.  move.l 20+6(a1),a2
  687.  add.l a1,a2
  688.  move.l a2,FloorLines
  689.  move.l 24+6(a1),a2
  690.  add.l a1,a2
  691.  move.l a2,ObjectData
  692. *****************************************
  693. * Just for charles
  694.  
  695. ; move.w #$6060,6(a2)
  696. ; move.l #$d0000,8(a2)
  697. ; sub.w #40,4(a2)
  698. ; move.w #45*256+45,14(a2)
  699. ****************************************
  700.  move.l 28+6(a1),a2
  701.  add.l a1,a2
  702.  move.l a2,PlayerShotData
  703.  move.l 32+6(a1),a2
  704.  add.l a1,a2
  705.  move.l a2,NastyShotData
  706.  
  707.  add.l #64*20,a2
  708.  move.l a2,OtherNastyData
  709.  
  710.  move.l 36+6(a1),a2
  711.  add.l a1,a2
  712.  move.l a2,ObjectPoints  
  713.  move.l 40+6(a1),a2
  714.  add.l a1,a2
  715.  move.l a2,PLR1_Obj
  716.  move.l 44+6(a1),a2
  717.  add.l a1,a2
  718.  move.l a2,PLR2_Obj
  719.  move.w 14+6(a1),NumObjectPoints
  720.  
  721. ; bra noclips
  722.   
  723.  move.l LEVELCLIPS,a2
  724.  moveq #0,d0
  725.  move.w 10+6(a1),d7    ;numzones
  726. assignclips:
  727.  move.l (a0)+,a3
  728.  add.l a1,a3    ; pointer to a zone
  729.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  730. dowholezone:
  731.  tst.w (a3)
  732.  blt.s nomorethiszone
  733.  tst.w 2(a3)
  734.  blt.s thisonenull
  735.  
  736.  move.l d0,d1
  737.  asr.l #1,d1
  738.  move.w d1,2(a3)
  739.  
  740. findnextclip:
  741.  cmp.w #-2,(a2,d0.l)
  742.  beq.s foundnextclip
  743.  addq.l #2,d0
  744.  bra.s findnextclip
  745. foundnextclip
  746.  addq.l #2,d0
  747.  
  748. thisonenull:
  749.  addq #8,a3 
  750.  bra.s dowholezone
  751. nomorethiszone:
  752.  dbra d7,assignclips
  753.  
  754.  lea (a2,d0.l),a2
  755.  move.l a2,CONNECT_TABLE
  756.  
  757. noclips:
  758.  
  759. * Put in addresses of glowything
  760.  
  761.  
  762. ************************************
  763.  
  764. ; cmp.b #'k',Prefsfile
  765. ; bne.s nkb
  766.  
  767. ;nkb:
  768. ; cmp.b #'m',Prefsfile
  769. ; bne.s nmc
  770. ; clr.b PLR1KEYS
  771. ; clr.b PLR1PATH
  772. ; st PLR1MOUSE
  773. ; clr.b PLR1JOY
  774. ;nmc:
  775. ; cmp.b #'j',Prefsfile
  776. ; bne.s njc
  777. ; clr.b PLR1KEYS
  778. ; clr.b PLR1PATH
  779. ; clr.b PLR1MOUSE
  780. ; st PLR1JOY
  781. ;njc:
  782.  
  783.  clr.b PLR1_StoodInTop
  784.  move.l #playerheight,PLR1s_height
  785.  
  786.  move.l #empty,pos1LEFT
  787.  move.l #empty,pos2LEFT
  788.  move.l #empty,pos1RIGHT
  789.  move.l #empty,pos2RIGHT
  790.  move.l #emptyend,Samp0endLEFT
  791.  move.l #emptyend,Samp1endLEFT
  792.  move.l #emptyend,Samp0endRIGHT
  793.  move.l #emptyend,Samp1endRIGHT
  794.  
  795.  move.l #nullspr,d0
  796.  move.w d0,s4l
  797.  move.w d0,s5l
  798.  move.w d0,s6l
  799.  move.w d0,s7l
  800.  swap d0
  801.  move.w d0,s4h
  802.  move.w d0,s5h
  803.  move.w d0,s6h
  804.  move.w d0,s7h 
  805.  
  806.  move.l #nullline,d0
  807.  move.w d0,n1l
  808.  swap d0
  809.  move.w d0,n1h
  810.  
  811.  move.l Panel,d0
  812.  move.w d0,p1l
  813.  swap d0
  814.  move.w d0,p1h
  815.  swap d0
  816.  add.l #40,d0
  817.  move.w d0,p2l
  818.  swap d0
  819.  move.w d0,p2h
  820.  swap d0
  821.  add.l #40,d0
  822.  move.w d0,p3l
  823.  swap d0
  824.  move.w d0,p3h
  825.  swap d0
  826.  add.l #40,d0
  827.  move.w d0,p4l
  828.  swap d0
  829.  move.w d0,p4h
  830.  swap d0
  831.  add.l #40,d0
  832.  move.w d0,p5l
  833.  swap d0
  834.  move.w d0,p5h
  835.  swap d0
  836.  add.l #40,d0
  837.  move.w d0,p6l
  838.  swap d0
  839.  move.w d0,p6h
  840.  swap d0
  841.  add.l #40,d0
  842.  move.w d0,p7l
  843.  swap d0
  844.  move.w d0,p7h
  845.  swap d0
  846.  add.l #40,d0
  847.  move.w d0,p8l
  848.  swap d0
  849.  move.w d0,p8h
  850.  
  851. *******************************
  852. * TIMER SCREEN SETUP
  853. ; move.l #TimerScr,d0
  854. ; move.w d0,p1l
  855. ; swap d0
  856. ; move.w d0,p1h
  857. ; move.w #$1201,Panelcon
  858.  
  859.  move.l #borders,d0
  860.  move.w d0,s0l
  861.  swap d0
  862.  move.w d0,s0h
  863.  move.l #borders+2592,d0
  864.  move.w d0,s1l
  865.  swap d0
  866.  move.w d0,s1h
  867.  move.l #borders+2592*2,d0
  868.  move.w d0,s2l
  869.  swap d0
  870.  move.w d0,s2h
  871.  move.l #borders+2592*3,d0
  872.  move.w d0,s3l
  873.  swap d0
  874.  move.w d0,s3h
  875.  
  876.  move.w #52*256+64,borders
  877.  move.w #212*256+0,borders+8
  878.  move.w #52*256+64,borders+2592
  879.  move.w #212*256+128,borders+8+2592
  880.  move.w #52*256+192,borders+2592*2
  881.  move.w #212*256+0,borders+8+2592*2
  882.  move.w #52*256+192,borders+2592*3
  883.  move.w #212*256+128,borders+8+2592*3
  884.  
  885.  move.l #FacePlace,d0
  886.  move.w d0,f1l
  887.  swap d0
  888.  move.w d0,f1h
  889.  move.l #FacePlace+32*24,d0
  890.  move.w d0,f2l
  891.  swap d0
  892.  move.w d0,f2h
  893.  move.l #FacePlace+32*24*2,d0
  894.  move.w d0,f3l
  895.  swap d0
  896.  move.w d0,f3h
  897.  move.l #FacePlace+32*24*3,d0
  898.  move.w d0,f4l
  899.  swap d0
  900.  move.w d0,f4h
  901.  move.l #FacePlace+32*24*4,d0
  902.  move.w d0,f5l
  903.  swap d0
  904.  move.w d0,f5h
  905.   
  906.  
  907.  move.l #bigfield,d0
  908.  move.w d0,ocl
  909.  swap d0
  910.  move.w d0,och
  911.  
  912.  bset.b #1,$bfe001
  913.  
  914. ; jmp stuff
  915. ;endstuff:
  916.  
  917.  move.w #$00ff,$dff09e
  918.  
  919. ; move.l #Blurbfield,$dff080
  920.  
  921.  move.w #0,d0
  922.  
  923.  move.l #scrn,d0
  924.  move.w d0,pl1l
  925.  swap d0
  926.  move.w d0,pl1h
  927.  
  928.  move.l #scrn+40,d0
  929.  move.w d0,pl2l
  930.  swap d0
  931.  move.w d0,pl2h
  932.  
  933.  move.l #scrn+80,d0
  934.  move.w d0,pl3l
  935.  swap d0
  936.  move.w d0,pl3h
  937.  
  938.  move.l #scrn+120,d0
  939.  move.w d0,pl4l
  940.  swap d0
  941.  move.w d0,pl4h
  942.  
  943.  move.l #scrn+160,d0
  944.  move.w d0,pl5l
  945.  swap d0
  946.  move.w d0,pl5h
  947.  
  948.  move.l #scrn+200,d0
  949.  move.w d0,pl6l
  950.  swap d0
  951.  move.w d0,pl6h
  952.  
  953.  move.l #scrn+240,d0
  954.  move.w d0,pl7l
  955.  swap d0
  956.  move.w d0,pl7h
  957.  
  958.  
  959. ****************************
  960.  jsr INITPLAYER
  961. ; bsr initobjpos
  962. ****************************
  963.  
  964.  
  965.  move.l #$dff000,a6
  966.  
  967.  move.l #null,$dff0a0
  968.  move.w #100,$dff0a4
  969.  move.w #443,$dff0a6
  970.  move.w #63,$dff0a8
  971.  
  972.  move.l #null2,$dff0b0
  973.  move.w #100,$dff0b4
  974.  move.w #443,$dff0b6
  975.  move.w #63,$dff0b8
  976.  
  977.  move.l #null4,$dff0c0
  978.  move.w #100,$dff0c4
  979.  move.w #443,$dff0c6
  980.  move.w #63,$dff0c8
  981.  
  982.  move.l #null3,$dff0d0
  983.  move.w #100,$dff0d4
  984.  move.w #443,$dff0d6
  985.  move.w #63,$dff0d8
  986.  
  987.  move.l #tab,a1
  988.  move.w #64,d7
  989.  move.w #0,d6
  990. outerlop
  991.  move.l #pretab,a0
  992.  move.w #255,d5
  993. scaledownlop:
  994.  move.b (a0)+,d0
  995.  ext.w d0
  996.  ext.l d0
  997.  muls d6,d0
  998.  asr.l #6,d0
  999.  move.b d0,(a1)+
  1000.  dbra d5,scaledownlop
  1001.  addq #1,d6
  1002.  dbra d7,outerlop
  1003.  
  1004.  move.l #$dff000,a6
  1005.  
  1006.  move.w #$c018,intena(a6)
  1007.  
  1008.  move.w #$f,dmacon(a6)
  1009.  move.w #$820f,dmacon(a6)
  1010.  
  1011. ; bsr protinit
  1012.  
  1013.  
  1014. ; move.w #$20,$1dc(a6)
  1015.  
  1016.  move.w #$0,$dff034
  1017.  move.w #0,Conditions
  1018.  
  1019.  cmp.b #'n',mors
  1020.  beq.s .nokeys
  1021.  move.w #%111111111111,Conditions
  1022. .nokeys:
  1023.  
  1024.  move.l #KeyMap,a5
  1025.  clr.b $45(a5)
  1026.  
  1027.  move.l #ingame,mt_data
  1028.  clr.b UseAllChannels
  1029.  
  1030. ; cmp.b #'b',Prefsfile+3
  1031. ; bne.s .noback
  1032. ; jsr mt_init
  1033. ;.noback:
  1034. ;
  1035. ; clr.b CHANNELDATA
  1036. ; clr.b CHANNELDATA+8
  1037. ; clr.b CHANNELDATA+16
  1038. ; clr.b CHANNELDATA+24
  1039. ;
  1040. ; cmp.b #'b',Prefsfile+3
  1041. ; bne.s noreserve
  1042. ;
  1043. ; st CHANNELDATA
  1044. ; st CHANNELDATA+8
  1045. ; st CHANNELDATA+16
  1046. ; st CHANNELDATA+24
  1047. ;noreserve: 
  1048.  
  1049. ; st CHANNELDATA
  1050. ; st CHANNELDATA+8
  1051.  
  1052.  move.l SampleList+6*8,pos0LEFT
  1053.  move.l SampleList+6*8+4,Samp0endLEFT
  1054.  move.l #playerheight,PLR1s_targheight
  1055.  move.l #playerheight,PLR1s_height
  1056.  move.l #playerheight,PLR2s_targheight
  1057.  move.l #playerheight,PLR2s_height
  1058.  
  1059. ; cmp.b #'n',mors
  1060. ; beq.s nohandshake
  1061. ;
  1062. ; move.b #%11011000,$bfd200
  1063. ; move.b #%00010000,$bfd000
  1064. ;waitloop:
  1065. ; btst.b #4,$bfd000
  1066. ; bne.s waitloop
  1067. ; move.b #%11000000,$bfd200
  1068.  
  1069. ;wtmouse:
  1070. ; btst #6,$bfe001
  1071. ; bne.s wtmouse
  1072.  
  1073. ;nohandshake:
  1074.  st doanything
  1075.  
  1076. ; jmp end
  1077.  
  1078.  move.l COPSCRN1,drawpt
  1079.  move.l COPSCRN2,olddrawpt
  1080.  
  1081.  IFEQ CD32VER
  1082.  jsr KInt_Init
  1083.  jsr CLEARKEYBOARD
  1084.  ENDC
  1085.  jsr MAKEBACKROUT
  1086.  
  1087.  clr.b MASTERQUITTING
  1088.  
  1089.  cmp.b #'n',mors
  1090.  seq SLAVEQUITTING
  1091.  
  1092.  move.w #127,PLR2_energy
  1093.  
  1094. ; move.l #ANOTHERSUP,$80
  1095. ; trap #0
  1096. ; rts
  1097. ;
  1098. ;ANOTHERSUP:
  1099.  
  1100.  CACHE_FREEZE_OFF d2
  1101.  
  1102.  move.w #0,hitcol
  1103.  move.w #0,hitcol2
  1104.  
  1105.  cmp.b #'n',mors
  1106.  bne.s NOCLTXT
  1107.  
  1108.  move.b #0,lastpressed
  1109. .wtpress
  1110.  btst #6,$bfe001
  1111.  beq.s CLOSETXT
  1112.  btst #7,$bfe001
  1113.  beq.s CLOSETXT
  1114.  tst.b lastpressed
  1115.  beq.s .wtpress
  1116.  
  1117. CLOSETXT:
  1118.  
  1119.  move.w #$8f8,d0
  1120.  move.w #7,d1
  1121.  
  1122. .fdup
  1123.  move.w d0,TXTCOLL
  1124.  sub.w #$121,d0
  1125. .wtframe:
  1126.  btst #5,$dff000+intreqrl
  1127.  beq.s .wtframe
  1128.  move.w #$0020,$dff000+intreq
  1129.  dbra d1,.fdup
  1130.  
  1131.  move.w #0,TXTCOLL
  1132.  
  1133. NOCLTXT:
  1134.  
  1135.  
  1136.  
  1137.     move.l    4.w,a6
  1138.     jsr    _LVOForbid(a6)
  1139. ;    jsr    _LVODisable(a6)
  1140.  
  1141.  
  1142. ;    move.w    #%0111111111111111,intena+$dff000
  1143. ;    move.w    #%1000000011111111,intena+$dff000
  1144.  
  1145.  
  1146.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1147.  
  1148.  
  1149.  clr.b PLR1_Ducked
  1150.  clr.b PLR2_Ducked
  1151.  clr.b p1_ducked
  1152.  clr.b p2_ducked
  1153.  
  1154. ********************************************
  1155. ; jmp  ENDGAMESCROLL
  1156. ********************************************
  1157.  
  1158.  DATA_CACHE_ON d2
  1159.  
  1160.  
  1161. lop:
  1162.  
  1163.  btst #6,$bfe001
  1164.  bne.b .nocop
  1165.  
  1166.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1167.  
  1168. .nocop
  1169.  
  1170.  cmp.b #'n',mors
  1171.  bne .nopause
  1172.  
  1173.  move.l #KeyMap,a5
  1174.  tst.b $19(a5)
  1175.  beq.s .nopause
  1176.  clr.b doanything
  1177.  
  1178. .waitrel:
  1179.  tst.b $19(a5)
  1180.  bne.s .waitrel
  1181.  
  1182.  bsr PAUSEOPTS
  1183.  
  1184.  
  1185.  st doanything
  1186. .nopause: 
  1187.  
  1188.  st READCONTROLS
  1189.  move.l #$dff000,a6
  1190.  
  1191.  move.w hitcol,d0
  1192.  beq.s nofadedownhc
  1193.  sub.w #$100,d0
  1194.  move.w d0,hitcol
  1195.  move.w d0,hitcol2
  1196. nofadedownhc:
  1197.  
  1198.  cmp.b #'n',mors
  1199.  beq .nopause
  1200.  
  1201.  move.b SLAVEPAUSE,d0
  1202.  or.b MASTERPAUSE,d0
  1203.  beq.s .nopause
  1204.  clr.b doanything
  1205.  
  1206.  move.l #KeyMap,a5
  1207. .waitrel:
  1208.  tst.b $19(a5)
  1209.  bne.s .waitrel
  1210.  
  1211.  bsr PAUSEOPTS
  1212.  
  1213.  cmp.b #'m',mors
  1214.  bne.s .slavelast
  1215.  Jsr SENDFIRST
  1216.  bra .masfirst
  1217. .slavelast
  1218.  Jsr RECFIRST
  1219. .masfirst:
  1220.  clr.b SLAVEPAUSE
  1221.  clr.b MASTERPAUSE
  1222.  st doanything
  1223.  
  1224. .nopause: 
  1225.  
  1226.  
  1227.  
  1228.  move.l drawpt,d0
  1229.  move.l olddrawpt,drawpt
  1230.  move.l d0,olddrawpt
  1231.  move.l d0,$dff084    
  1232.  move.l drawpt,a3
  1233. ; move.l COPSCRNBUFF,a3
  1234.  adda.w #10,a3
  1235.  move.l a3,frompt
  1236.  add.l #104*4*40,a3
  1237.  move.l a3,midpt
  1238.  
  1239.  cmp.b #'s',mors
  1240.  beq.s nowaitslave
  1241.  
  1242. waitfortop:
  1243.  
  1244.  btst.b #0,intreqrl(a6)
  1245.  beq.b waitfortop
  1246.  
  1247.  move.w #$1,intreq(a6)
  1248.  move.l #PLR1_GunData,GunData
  1249.  move.b PLR1_GunSelected,GunSelected
  1250.  bra waitmaster
  1251.  
  1252. nowaitslave:
  1253.  move.l #PLR2_GunData,GunData
  1254.  move.b PLR2_GunSelected,GunSelected
  1255. waitmaster:
  1256.  
  1257.  
  1258.  move.l waterpt,a0
  1259.  move.l (a0)+,watertouse
  1260.  cmp.l #endwaterlist,a0
  1261.  blt.s okwat
  1262.  move.l #waterlist,a0
  1263. okwat:
  1264.  move.l a0,waterpt
  1265.  
  1266.  add.w #640,wtan
  1267.  and.w #8191,wtan
  1268.  add.w #1,wateroff
  1269.  and.w #63,wateroff
  1270.  
  1271.  move.l GunData,a6
  1272.  moveq #0,d0
  1273.  move.b GunSelected,d0
  1274.  lsl.w #2,d0
  1275.  lea (a6,d0.w*8),a6
  1276.  move.w (a6),d0
  1277.  asr.w #3,d0
  1278.  move.w d0,Ammo
  1279.  
  1280.  move.l PLR1_xoff,OLDX1
  1281.  move.l PLR1_zoff,OLDZ1
  1282.  move.l PLR2_xoff,OLDX2
  1283.  move.l PLR2_zoff,OLDZ2
  1284.  
  1285.  
  1286.  
  1287.  move.l #$dff000,a6
  1288.  
  1289.  cmp.b #'s',mors
  1290.  beq ASlaveShouldWaitOnHisMaster
  1291.  
  1292.  cmp.b #'n',mors
  1293.  bne NotOnePlayer
  1294.  
  1295.  move.w PLR1_energy,Energy
  1296.  move.w FramesToDraw,TempFrames
  1297.  cmp.w #15,TempFrames
  1298.  blt.s .okframe
  1299.  move.w #15,TempFrames
  1300. .okframe:
  1301.  move.w #0,FramesToDraw
  1302.  
  1303. *********************************************
  1304. *********** TAKE THIS OUT *******************
  1305. *********************************************
  1306.  
  1307.  move.l #KeyMap,a5
  1308.  tst.b (a5)
  1309.  beq.s .nocheat
  1310.  move.w #127,PLR1_energy
  1311.  bsr EnergyBar
  1312. .nocheat
  1313. **********************************************
  1314. **********************************************
  1315. **********************************************
  1316.  
  1317.  move.l PLR1s_xoff,p1_xoff
  1318.  move.l PLR1s_zoff,p1_zoff
  1319.  move.l PLR1s_yoff,p1_yoff
  1320.  move.l PLR1s_height,p1_height
  1321.  move.w PLR1s_angpos,p1_angpos
  1322.  move.w PLR1_bobble,p1_bobble
  1323.  move.b PLR1_clicked,p1_clicked
  1324.  move.b PLR1_fire,p1_fire
  1325.  clr.b PLR1_clicked
  1326.  move.b PLR1_SPCTAP,p1_spctap
  1327.  clr.b PLR1_SPCTAP
  1328.  move.b PLR1_Ducked,p1_ducked
  1329.  move.b PLR1_GunSelected,p1_gunselected
  1330.  
  1331.  bsr PLR1_Control
  1332.  
  1333.  move.l PLR1_Roompt,a0
  1334.  move.l ToZoneRoof(a0),SplitHeight
  1335.  move.w p1_xoff,THISPLRxoff
  1336.  move.w p1_zoff,THISPLRzoff
  1337.  
  1338.  
  1339.  move.l #$60000,p2_yoff
  1340.  move.l PLR2_Obj,a0
  1341.  move.w #-1,GraphicRoom(a0)
  1342.  move.w #-1,12(a0)
  1343.  move.b #0,17(a0)
  1344.  move.l #BollocksRoom,PLR2_Roompt
  1345.  
  1346.  bra donetalking
  1347.  
  1348. NotOnePlayer:
  1349.  move.l #KeyMap,a5
  1350.  tst.b $19(a5)
  1351.  sne MASTERPAUSE
  1352.  
  1353. *********************************
  1354.  move.w PLR1_energy,Energy
  1355. ; change this back
  1356. *********************************
  1357.  
  1358.  jsr SENDFIRST
  1359.  
  1360.  move.w FramesToDraw,TempFrames
  1361.  cmp.w #15,TempFrames
  1362.  blt.s .okframe
  1363.  move.w #15,TempFrames
  1364. .okframe:
  1365.  move.w #0,FramesToDraw
  1366.  
  1367.  move.l PLR1s_xoff,p1_xoff
  1368.  move.l PLR1s_zoff,p1_zoff
  1369.  move.l PLR1s_yoff,p1_yoff
  1370.  move.l PLR1s_height,p1_height
  1371.  move.w PLR1s_angpos,p1_angpos
  1372.  move.w PLR1_bobble,p1_bobble
  1373.  move.b PLR1_clicked,p1_clicked
  1374.  clr.b PLR1_clicked
  1375.  move.b PLR1_fire,p1_fire
  1376.  move.b PLR1_SPCTAP,p1_spctap
  1377.  clr.b PLR1_SPCTAP
  1378.  move.b PLR1_Ducked,p1_ducked
  1379.  move.b PLR1_GunSelected,p1_gunselected
  1380.  
  1381.  move.l p1_xoff,d0
  1382.  jsr SENDFIRST
  1383.  move.l d0,p2_xoff
  1384.  
  1385.  move.l p1_zoff,d0
  1386.  jsr SENDFIRST
  1387.  move.l d0,p2_zoff 
  1388.  
  1389.  move.l p1_yoff,d0
  1390.  jsr SENDFIRST
  1391.  move.l d0,p2_yoff
  1392.   
  1393.  move.l p1_height,d0
  1394.  jsr SENDFIRST
  1395.  move.l d0,p2_height
  1396.  
  1397.  move.w p1_angpos,d0
  1398.  swap d0
  1399.  move.w p1_bobble,d0
  1400.  jsr SENDFIRST
  1401.  move.w d0,p2_bobble
  1402.  swap d0
  1403.  move.w d0,p2_angpos
  1404.  
  1405.  
  1406.  move.w TempFrames,d0
  1407.  swap d0
  1408.  move.b p1_spctap,d0
  1409.  lsl.w #8,d0
  1410.  move.b p1_clicked,d0
  1411.  jsr SENDFIRST
  1412.  move.b d0,p2_clicked
  1413.  lsr.w #8,d0
  1414.  move.b d0,p2_spctap
  1415.  
  1416.  
  1417.  move.w Rand1,d0
  1418.  swap d0
  1419.  move.b p1_ducked,d0
  1420.  lsl.w #8,d0
  1421.  move.b p1_gunselected,d0
  1422.  jsr SENDFIRST
  1423.  move.b d0,p2_gunselected
  1424.  lsr.w #8,d0
  1425.  move.b d0,p2_ducked
  1426.  
  1427.  move.b p1_fire,d0
  1428.  lsl.w #8,d0
  1429.  move.b MASTERQUITTING,d0
  1430.  or.b d0,SLAVEQUITTING
  1431.  swap d0
  1432.  move.b MASTERPAUSE,d0
  1433.  or.b d0,SLAVEPAUSE
  1434.  jsr SENDFIRST
  1435.  or.b d0,MASTERPAUSE
  1436.  or.b d0,SLAVEPAUSE
  1437.  swap d0
  1438.  or.b d0,SLAVEQUITTING
  1439.  or.b d0,MASTERQUITTING
  1440.  lsr.w #8,d0
  1441.  move.b d0,p2_fire
  1442.  
  1443.  bsr PLR1_Control
  1444.  bsr PLR2_Control
  1445.  move.l PLR1_Roompt,a0
  1446.  move.l ToZoneRoof(a0),SplitHeight
  1447.  move.w p1_xoff,THISPLRxoff
  1448.  move.w p1_zoff,THISPLRzoff
  1449.  
  1450.  bra donetalking
  1451.  
  1452. ASlaveShouldWaitOnHisMaster:
  1453.  
  1454.  move.l #KeyMap,a5
  1455.  tst.b $19(a5)
  1456.  sne SLAVEPAUSE
  1457.  
  1458.  
  1459.  move.w PLR2_energy,Energy
  1460.  
  1461.  jsr RECFIRST
  1462.  
  1463.  move.l PLR2s_xoff,p2_xoff
  1464.  move.l PLR2s_zoff,p2_zoff
  1465.  move.l PLR2s_yoff,p2_yoff
  1466.  move.l PLR2s_height,p2_height
  1467.  move.w PLR2s_angpos,p2_angpos
  1468.  move.w PLR2_bobble,p2_bobble
  1469.  move.b PLR2_clicked,p2_clicked
  1470.  clr.b PLR2_clicked
  1471.  move.b PLR2_fire,p2_fire
  1472.  move.b PLR2_SPCTAP,p2_spctap
  1473.  clr.b PLR2_SPCTAP
  1474.  move.b PLR2_Ducked,p2_ducked
  1475.  move.b PLR2_GunSelected,p2_gunselected
  1476.  
  1477.  move.l p2_xoff,d0
  1478.  jsr RECFIRST
  1479.  move.l d0,p1_xoff
  1480.  
  1481.  move.l p2_zoff,d0
  1482.  jsr RECFIRST
  1483.  move.l d0,p1_zoff
  1484.  
  1485.  move.l p2_yoff,d0
  1486.  jsr RECFIRST
  1487.  move.l d0,p1_yoff
  1488.  
  1489.  move.l p2_height,d0
  1490.  jsr RECFIRST
  1491.  move.l d0,p1_height
  1492.  
  1493.  move.w p2_angpos,d0
  1494.  swap d0
  1495.  move.w p2_bobble,d0
  1496.  jsr RECFIRST
  1497.  move.w d0,p1_bobble
  1498.  swap d0
  1499.  move.w d0,p1_angpos
  1500.  
  1501.  
  1502.  move.b p2_spctap,d0
  1503.  lsl.w #8,d0
  1504.  move.b p2_clicked,d0
  1505.  jsr RECFIRST
  1506.  move.b d0,p1_clicked
  1507.  lsr.w #8,d0
  1508.  move.b d0,p1_spctap
  1509.  swap d0
  1510.  move.w d0,TempFrames
  1511.  
  1512.  
  1513.  move.b p2_ducked,d0
  1514.  lsl.w #8,d0
  1515.  move.b p2_gunselected,d0
  1516.  jsr RECFIRST
  1517.  move.b d0,p1_gunselected
  1518.  lsr.w #8,d0
  1519.  move.b d0,p1_ducked
  1520.  swap d0
  1521.  move.w d0,Rand1
  1522.  
  1523.  move.b p2_fire,d0
  1524.  lsl.w #8,d0
  1525.  move.b SLAVEQUITTING,d0
  1526.  or.b d0,MASTERQUITTING
  1527.  swap d0
  1528.  move.b SLAVEPAUSE,d0
  1529.  or.b d0,MASTERPAUSE
  1530.  jsr RECFIRST
  1531.  or.b d0,MASTERPAUSE
  1532.  or.b d0,SLAVEPAUSE
  1533.  swap d0
  1534.  or.b d0,SLAVEQUITTING
  1535.  or.b d0,MASTERQUITTING
  1536.  lsr.w #8,d0
  1537.  move.b d0,p1_fire
  1538.  
  1539.  
  1540.  bsr PLR1_Control
  1541.  bsr PLR2_Control
  1542.  move.w p2_xoff,THISPLRxoff
  1543.  move.w p2_zoff,THISPLRzoff
  1544.  move.l PLR2_Roompt,a0
  1545.  move.l ToZoneRoof(a0),SplitHeight
  1546.  
  1547. donetalking:
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  move.l #ZoneBrightTable,a1
  1553.  move.l ZoneAdds,a2
  1554.  move.l PLR2_ListOfGraphRooms,a0
  1555.  move.l PLR2_PointsToRotatePtr,a5
  1556.  cmp.b #'s',mors
  1557.  beq.s doallz
  1558.  move.l PLR1_ListOfGraphRooms,a0
  1559.  move.l PLR1_PointsToRotatePtr,a5
  1560.  
  1561. doallz
  1562.  move.w (a0),d0
  1563.  blt.s doneallz
  1564.  add.w #8,a0
  1565.  
  1566.  move.l (a2,d0.w*4),a3
  1567.  add.l LEVELDATA,a3
  1568.  move.w ToZoneBrightness(a3),d2
  1569.  
  1570.  blt.s justbright
  1571.  move.w d2,d3
  1572.  lsr.w #8,d3
  1573.  tst.b d3
  1574.  beq.s justbright
  1575.  
  1576.  move.l #BrightAnimTable,a4
  1577.  move.w -2(a4,d3.w*2),d2
  1578.  
  1579. justbright:
  1580.  move.w d2,(a1,d0.w*4)
  1581.  
  1582.  move.w ToUpperBrightness(a3),d2
  1583.  
  1584.  blt.s justbright2
  1585.  move.w d2,d3
  1586.  lsr.w #8,d3
  1587.  tst.b d3
  1588.  beq.s justbright2
  1589.  
  1590.  move.l #BrightAnimTable,a4
  1591.  move.w -2(a4,d3.w*2),d2
  1592.  
  1593. justbright2:
  1594.  move.w d2,2(a1,d0.w*4)
  1595.  
  1596.  bra doallz
  1597.  
  1598. doneallz:
  1599.  
  1600.  move.l PointBrights,a2
  1601.  move.l #CurrentPointBrights,a3
  1602. justtheone:
  1603.  move.w (a5)+,d0
  1604.  blt.s whythehell
  1605.  move.w (a2,d0.w*4),d2
  1606.  
  1607.  tst.b d2
  1608.  blt.s .justbright
  1609.  move.w d2,d3
  1610.  lsr.w #8,d3
  1611.  tst.b d3
  1612.  beq.s .justbright
  1613.  
  1614.  move.w d3,d4
  1615.  and.w #$f,d3
  1616.  lsr.w #4,d4
  1617.  add.w #1,d4
  1618.  
  1619.  move.l #BrightAnimTable,a0
  1620.  move.w -2(a0,d3.w*2),d3
  1621.  ext.w d2
  1622.  sub.w d2,d3
  1623.  muls d4,d3
  1624.  asr.w #4,d3
  1625.  add.w d3,d2
  1626.  
  1627. .justbright:
  1628.  ext.w d2
  1629.  
  1630.  move.w d2,(a3,d0.w*4)
  1631.  move.w 2(a2,d0.w*4),d2
  1632.  
  1633.  tst.b d2
  1634.  blt.s .justbright2
  1635.  move.w d2,d3
  1636.  lsr.w #8,d3
  1637.  tst.b d3
  1638.  beq.s .justbright2
  1639.  
  1640.  move.w d3,d4
  1641.  and.w #$f,d3
  1642.  lsr.w #4,d4
  1643.  add.w #1,d4
  1644.  
  1645.  move.l #BrightAnimTable,a0
  1646.  move.w -2(a0,d3.w*2),d3
  1647.  ext.w d2
  1648.  sub.w d2,d3
  1649.  muls d4,d3
  1650.  asr.w #4,d3
  1651.  add.w d3,d2
  1652.  
  1653. .justbright2:
  1654.  ext.w d2
  1655.  
  1656.  move.w d2,2(a3,d0.w*4)
  1657.  
  1658.  bra.s justtheone
  1659.  
  1660. whythehell:
  1661.  
  1662.  cmp.b #'n',mors
  1663.  beq nosee
  1664.  
  1665.  move.l PLR1_Roompt,FromRoom
  1666.  move.l PLR2_Roompt,ToRoom
  1667.  move.w p1_xoff,Viewerx
  1668.  move.w p1_zoff,Viewerz
  1669.  move.l p1_yoff,d0
  1670.  asr.l #7,d0
  1671.  move.w d0,Viewery
  1672.  move.w p2_xoff,Targetx
  1673.  move.w p2_zoff,Targetz
  1674.  move.l p2_yoff,d0
  1675.  asr.l #7,d0
  1676.  move.w d0,Targety
  1677.  move.b PLR1_StoodInTop,ViewerTop
  1678.  move.b PLR2_StoodInTop,TargetTop
  1679.  jsr CanItBeSeen
  1680.  
  1681.  move.l PLR1_Obj,a0
  1682.  move.b CanSee,d0
  1683.  and.b #2,d0
  1684.  move.b d0,17(a0)
  1685.  move.l PLR2_Obj,a0
  1686.  move.b CanSee,d0
  1687.  and.b #1,d0
  1688.  move.b d0,17(a0)
  1689.  
  1690. nosee:
  1691.  
  1692.  move.l PLR1_Obj,a0
  1693.  move.b #5,16(a0)
  1694.  move.l PLR2_Obj,a0
  1695.  move.b #11,16(a0)
  1696.  
  1697.  move.w TempFrames,d0
  1698.  add.w d0,p1_holddown
  1699.  cmp.w #30,p1_holddown
  1700.  blt.s oklength
  1701.  move.w #30,p1_holddown
  1702. oklength:
  1703.  
  1704.  tst.b p1_fire
  1705.  bne.s okstillheld
  1706.  sub.w d0,p1_holddown
  1707.  bge.s okstillheld
  1708.  move.w #0,p1_holddown
  1709.  
  1710. okstillheld:
  1711.  
  1712.  move.w TempFrames,d0
  1713.  add.w d0,p2_holddown
  1714.  
  1715.  cmp.w #30,p2_holddown
  1716.  blt.s oklength2
  1717.  move.w #30,p2_holddown
  1718. oklength2:
  1719.  
  1720.  
  1721.  tst.b p2_fire
  1722.  bne.s okstillheld2
  1723.  sub.w d0,p2_holddown
  1724.  bge.s okstillheld2
  1725.  move.w #0,p2_holddown
  1726. okstillheld2:
  1727.  
  1728. ; move.l #PLR1_GunData,a1
  1729. ; move.w p1_holddown,d0
  1730. ; move.w #50,10+32*3(a1)
  1731. ; move.l #PLR2_GunData,a1
  1732. ; move.w p2_holddown,d0
  1733. ; move.w #50,10+32*3(a1)
  1734.  
  1735.  
  1736. ******************************************
  1737. ******************************************
  1738.  
  1739.  move.w TempFrames,d1
  1740.  bgt.s noze
  1741.  moveq #1,d1
  1742. noze:
  1743.  
  1744.  move.w PLR1_xoff,d0
  1745.  sub.w OLDX1,d0
  1746.  asl.w #4,d0
  1747.  ext.l d0
  1748.  divs d1,d0
  1749.  move.w d0,XDIFF1
  1750.  move.w PLR2_xoff,d0
  1751.  sub.w OLDX2,d0
  1752.  asl.w #4,d0
  1753.  ext.l d0
  1754.  divs d1,d0
  1755.  move.w d0,XDIFF2
  1756.  move.w PLR1_zoff,d0
  1757.  sub.w OLDZ1,d0
  1758.  asl.w #4,d0
  1759.  ext.l d0
  1760.  divs d1,d0
  1761.  move.w d0,ZDIFF1
  1762.  move.w PLR2_zoff,d0
  1763.  sub.w OLDZ2,d0
  1764.  asl.w #4,d0
  1765.  ext.l d0
  1766.  divs d1,d0
  1767.  move.w d0,ZDIFF2
  1768.  
  1769.  cmp.b #'s',mors
  1770.  beq.s ImPlayer2OhYesIAm
  1771.  bsr USEPLR1
  1772.  bra IWasPlayer1
  1773.  
  1774. ImPlayer2OhYesIAm:
  1775.  bsr USEPLR2
  1776. IWasPlayer1:
  1777.  
  1778.  
  1779.  cmp.b #'s',mors
  1780.  beq drawplayer2
  1781.  
  1782.  move.w #0,scaleval
  1783.  
  1784.  move.l PLR1_xoff,xoff
  1785.  move.l PLR1_yoff,yoff
  1786.  move.l PLR1_zoff,zoff
  1787.  move.w PLR1_angpos,angpos
  1788.  move.w PLR1_cosval,cosval
  1789.  move.w PLR1_sinval,sinval
  1790.  
  1791.  
  1792.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1793.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1794.  move.l PLR1_Roompt,Roompt
  1795.  
  1796.  bsr OrderZones
  1797.  jsr objmoveanim
  1798.  bsr EnergyBar
  1799.  bsr AmmoBar
  1800.  
  1801.  move.w #0,leftclip
  1802.  move.w #96,rightclip
  1803.  move.w #0,deftopclip
  1804.  
  1805.  move.w #79,defbotclip
  1806.  move.w #0,topclip
  1807.  move.w #79,botclip
  1808. ; sub.l #10*104*4,frompt
  1809. ; sub.l #10*104*4,midpt
  1810.  
  1811. * Subroom loop
  1812.  
  1813.  
  1814.  bsr DrawDisplay 
  1815.  
  1816.  bra nodrawp2
  1817.  
  1818. drawplayer2
  1819.  
  1820.  move.w #0,scaleval
  1821.  move.l PLR2_xoff,xoff
  1822.  move.l PLR2_yoff,yoff
  1823.  move.l PLR2_zoff,zoff
  1824.  move.w PLR2_angpos,angpos
  1825.  move.w PLR2_cosval,cosval
  1826.  move.w PLR2_sinval,sinval 
  1827.  
  1828.  
  1829.  
  1830.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1831.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1832.  move.l PLR2_Roompt,Roompt
  1833.  
  1834.  bsr OrderZones
  1835.  jsr objmoveanim
  1836.  bsr EnergyBar
  1837.  bsr AmmoBar
  1838.  
  1839.  move.w #0,leftclip
  1840.  move.w #96,rightclip
  1841.  move.w #0,deftopclip
  1842.  move.w #79,defbotclip
  1843.  move.w #0,topclip
  1844.  move.w #79,botclip
  1845.  
  1846.  bsr DrawDisplay
  1847.  
  1848. nodrawp2:
  1849.  
  1850. ***************************************** 
  1851. * Copy from copbuff to chip ram
  1852.  
  1853.  
  1854. ; move.l drawpt,a3
  1855. ; adda.w #10,a3
  1856. ; move.l COPSCRNBUFF,a2
  1857. ; move.w #2,d6
  1858. ; adda.w #10,a2
  1859. ;COPYOUT
  1860. ; move.w #31,d0
  1861. ;COPYDOWN1:
  1862. ; move.w #3,d1
  1863. ; move.l a2,a4
  1864. ; move.l a3,a5
  1865. ;.inlop1:
  1866. ;val SET 0
  1867. ; REPT 20
  1868. ; move.w val(a4),val(a5)
  1869. ;val SET val+104*4
  1870. ; ENDR
  1871. ; adda.l #104*4*20,a4
  1872. ; adda.l #104*4*20,a5
  1873. ; dbra d1,.inlop1
  1874. ; addq #4,a2
  1875. ; addq #4,a3
  1876. ; dbra d0,COPYDOWN1
  1877. ; addq #4,a2
  1878. ; addq #4,a3
  1879. ; dbra d6,COPYOUT 
  1880.  
  1881.  
  1882. ***************************************** 
  1883.  move.l PLR2_Roompt,a0
  1884.  move.l #WorkSpace,a1
  1885.  clr.l (a1)
  1886.  clr.l 4(a1)
  1887.  clr.l 8(a1)
  1888.  clr.l 12(a1)
  1889.  clr.l 16(a1)
  1890.  clr.l 20(a1)
  1891.  clr.l 24(a1)
  1892.  clr.l 28(a1)
  1893.  
  1894.  cmp.b #'n',mors
  1895.  beq.s plr1only
  1896.  
  1897.  lea ToListOfGraph(a0),a0
  1898. .doallrooms:
  1899.  move.w (a0),d0
  1900.  blt.s .allroomsdone
  1901.  addq #8,a0
  1902.  move.w d0,d1
  1903.  asr.w #3,d0
  1904.  bset d1,(a1,d0.w)
  1905.  bra .doallrooms
  1906. .allroomsdone:
  1907.  
  1908. plr1only:
  1909.  
  1910.  move.l PLR1_Roompt,a0
  1911.  lea ToListOfGraph(a0),a0
  1912. .doallrooms2:
  1913.  move.w (a0),d0
  1914.  blt.s .allroomsdone2
  1915.  addq #8,a0
  1916.  move.w d0,d1
  1917.  asr.w #3,d0
  1918.  bset d1,(a1,d0.w)
  1919.  bra .doallrooms2
  1920. .allroomsdone2:
  1921.  
  1922.  move.l ObjectData,a0
  1923.  sub.w #64,a0
  1924. .doallobs:
  1925.  add.w #64,a0
  1926.  move.w (a0),d0
  1927.  blt.s .allobsdone
  1928.  move.w 12(a0),d0
  1929.  blt.s .doallobs
  1930.  move.w d0,d1
  1931.  asr.w #3,d0
  1932.  btst d1,(a1,d0.w)
  1933.  beq.s .doallobs
  1934.  or.b #127,worry(a0)
  1935.  bra.s .doallobs
  1936. .allobsdone:
  1937.  
  1938.  
  1939.  
  1940. ; move.l #brightentab,a0
  1941. ; move.l frompt,a3
  1942. ; adda.w #(4*33)+(104*4*20),a3
  1943. ; move.w #20,d7
  1944. ; move.w #20,d6
  1945. ;horl:
  1946. ; move.w d6,d5
  1947. ; move.l a3,a1
  1948. ;vertl
  1949. ; move.w (a1),d0
  1950. ; move.w (a0,d0.w*2),(a1)
  1951. ; addq #4,a1
  1952. ; dbra d5,vertl
  1953. ; adda.w #104*4,a3
  1954. ; dbra d7,horl
  1955.  
  1956.  move.l #$dff000,a6
  1957.  
  1958. ; move.w #$300,col0(a6)
  1959.  
  1960.  move.l #KeyMap,a5
  1961.  tst.b $45(a5)
  1962.  beq.s noend
  1963.  
  1964.  cmp.b #'s',mors
  1965.  beq plr2quit 
  1966.  
  1967.  st MASTERQUITTING
  1968.  bra noend
  1969.  
  1970. plr2quit:
  1971.  st SLAVEQUITTING
  1972. noend:
  1973.  
  1974.  tst.b MASTERQUITTING
  1975.  beq.s .noquit
  1976.  tst.b SLAVEQUITTING
  1977.  bne endnomusic
  1978. .noquit
  1979.  
  1980.  cmp.b #'n',mors
  1981.  bne.s .noexit
  1982.  move.l PLR1_Roompt,a0
  1983.  move.w (a0),d0
  1984.  move.w PLOPT,d1
  1985.  move.l #ENDZONES,a0
  1986.  cmp.w (a0,d1.w*2),d0
  1987.  beq end
  1988. .noexit:
  1989.  
  1990.  tst.w PLR1_energy
  1991.  ble end
  1992.  tst.w PLR2_energy
  1993.  ble end
  1994.  
  1995. ; move.l SwitchData,a0
  1996. ; tst.b 24+8(a0)
  1997. ; bne end
  1998.   
  1999.  JSR STOPTIMER
  2000.  
  2001.  bra lop
  2002.  
  2003. MASTERQUITTING: dc.b 0
  2004. SLAVEQUITTING: dc.b 0
  2005. MASTERPAUSE: dc.b 0
  2006. SLAVEPAUSE: dc.b 0
  2007.  
  2008. PAUSEOPTS:
  2009.  include "ab3:source/pauseopts"
  2010.  
  2011. ENDZONES:
  2012. ; LEVEL 1
  2013.  dc.w 132
  2014. ; LEVEL 2
  2015.  dc.w 149
  2016. ; LEVEL 3
  2017.  dc.w 155
  2018. ; LEVEL 4
  2019.  dc.w 107
  2020. ; LEVEL 5
  2021.  dc.w 67
  2022. ; LEVEL 6
  2023.  dc.w 132
  2024. ; LEVEL 7
  2025.  dc.w 203
  2026. ; LEVEL 8
  2027.  dc.w 166
  2028. ; LEVEL 9
  2029.  dc.w 118
  2030. ; LEVEL 10
  2031.  dc.w 102
  2032. ; LEVEL 11
  2033.  dc.w 103
  2034. ; LEVEL 12
  2035.  dc.w 2
  2036. ; LEVEL 13
  2037.  dc.w 98
  2038. ; LEVEL 14
  2039.  dc.w 0
  2040. ; LEVEL 15
  2041.  dc.w 148
  2042. ; LEVEL 16
  2043.  dc.w 103
  2044.  
  2045. ***************************************************************************
  2046. ***************************************************************************
  2047. ****************** End of Main Loop here ********************************** 
  2048. ***************************************************************************
  2049. ***************************************************************************
  2050.  
  2051. putinsmallscr:
  2052.  move.l #$1fe0000,statskip
  2053.  move.l #$1fe0000,statskip+4
  2054.  
  2055.  move.l #healthpal,a5
  2056.  move.l COPSCRN1,a0
  2057.  move.l COPSCRN2,a2
  2058.  move.w #scrheight-1,d0
  2059.  move.l #0,d6
  2060.  move.w #0,d3
  2061.  move.w #$2bdf,startwait
  2062.  move.w #$2d01,endwait
  2063. .fillcop
  2064.  move.w #$180,d1
  2065.  
  2066.  move.l a0,a1
  2067.  move.l a2,a3
  2068.  move.w #$10c,(a1)+
  2069.  move.w #$10c,(a3)+
  2070.  move.w d3,(a1)+
  2071.  move.w d3,(a3)+
  2072.  eor.w #$8000,d3
  2073.  
  2074.  move.w #$106,(a1)+
  2075.  move.w #$106,(a3)+
  2076.  move.w #$2c42,d5
  2077.  or.w d3,d5
  2078.  and.w #$fffe,d5
  2079.  move.w d5,(a1)+
  2080.  move.w d5,(a3)+
  2081.  bsr do32
  2082.  
  2083.  move.w #$106,(a1)+
  2084.  move.w #$106,(a3)+
  2085.  move.w #$4c42,d5
  2086.  or.w d3,d5
  2087.  and.w #$fffe,d5
  2088.  move.w d5,(a1)+
  2089.  move.w d5,(a3)+
  2090.  bsr do32
  2091.  
  2092.  move.w #$106,(a1)+
  2093.  move.w #$106,(a3)+
  2094.  move.w #$6c42,d5
  2095.  or.w d3,d5
  2096.  and.w #$fffe,d5
  2097.  move.w d5,(a1)+
  2098.  move.w d5,(a3)+
  2099.  bsr do32
  2100.  
  2101.  
  2102.  move.l #$1060c42,(a1)+
  2103.  move.l #$1060c42,(a3)+
  2104.  move.w #$19e,(a1)+
  2105.  move.w (a5),(a1)+
  2106.  move.w #$19e,(a3)+
  2107.  move.w (a5)+,(a3)+
  2108.  
  2109. **********************************
  2110.  
  2111.  adda.w #104*4,a0
  2112.  adda.w #104*4,a2
  2113.  dbra d0,.fillcop
  2114.  
  2115.  move.w #$48,fetchstart
  2116.  move.w #$88,fetchstop
  2117.  move.w #$2cb1,winstart
  2118.  move.w #$2c91,winstop
  2119.  move.w #-24,modulo
  2120.  move.w #-24,modulo+4
  2121.  
  2122.  move.l #nullspr,d0
  2123.  move.w d0,s4l
  2124.  move.w d0,s5l
  2125.  move.w d0,s6l
  2126.  move.w d0,s7l
  2127.  swap d0
  2128.  move.w d0,s4h
  2129.  move.w d0,s5h
  2130.  move.w d0,s6h
  2131.  move.w d0,s7h 
  2132.  
  2133.  move.l #borders,d0
  2134.  move.w d0,s0l
  2135.  swap d0
  2136.  move.w d0,s0h
  2137.  move.l #borders+2592,d0
  2138.  move.w d0,s1l
  2139.  swap d0
  2140.  move.w d0,s1h
  2141.  move.l #borders+2592*2,d0
  2142.  move.w d0,s2l
  2143.  swap d0
  2144.  move.w d0,s2h
  2145.  move.l #borders+2592*3,d0
  2146.  move.w d0,s3l
  2147.  swap d0
  2148.  move.w d0,s3h
  2149.  
  2150.  
  2151.  move.l #scrn+40,a0
  2152.  move.l #scrn+160,a1
  2153.  move.l #scrn+280,a2
  2154.  move.l #smallscrntab,a3
  2155.  move.w #191,d7    ; counter
  2156.  move.w #0,d1    ; xpos
  2157. .plotscrnloop:
  2158.  move.b (a3)+,d0
  2159.  move.w d1,d2
  2160.  asr.w #3,d2
  2161.  move.b d1,d3
  2162.  not.b d3
  2163.  bclr.b d3,-40(a0,d2.w)
  2164.  bclr.b d3,(a0,d2.w)
  2165.  bclr.b d3,40(a0,d2.w)
  2166.  bclr.b d3,-40(a1,d2.w)
  2167.  bclr.b d3,(a1,d2.w)
  2168.  bclr.b d3,40(a1,d2.w)
  2169.  bclr.b d3,-40(a2,d2.w)
  2170.  btst #0,d0
  2171.  beq.s .nobp1
  2172.  bset.b d3,-40(a0,d2.w)
  2173. .nobp1:
  2174.  btst #1,d0
  2175.  beq.s .nobp2
  2176.  bset.b d3,(a0,d2.w)
  2177. .nobp2:
  2178.  btst #2,d0
  2179.  beq.s .nobp3
  2180.  bset.b d3,40(a0,d2.w)
  2181. .nobp3:
  2182.  btst #3,d0
  2183.  beq.s .nobp4
  2184.  bset.b d3,-40(a1,d2.w)
  2185. .nobp4:
  2186.  btst #4,d0
  2187.  beq.s .nobp5
  2188.  bset.b d3,(a1,d2.w)
  2189. .nobp5:
  2190.  btst #5,d0
  2191.  beq.s .nobp6
  2192.  bset.b d3,40(a1,d2.w)
  2193. .nobp6:
  2194.  btst #6,d0
  2195.  beq.s .nobp7
  2196.  bset.b d3,-40(a2,d2.w)
  2197. .nobp7:
  2198.  
  2199.  addq #1,d1
  2200.  
  2201.  dbra d7,.plotscrnloop
  2202.  
  2203.  
  2204.  rts
  2205.  
  2206. putinlargescr:
  2207.  
  2208.  move.l #$1000000,statskip
  2209.  move.l #$fffffffe,statskip+4
  2210.  
  2211.  move.l #healthpal,a5
  2212.  move.l COPSCRN1,a0
  2213.  move.l COPSCRN2,a2
  2214.  move.w #scrheight-1,d0
  2215.  move.l #0,d6
  2216.  move.w #0,d3
  2217.  move.w #$29df,startwait
  2218.  move.w #$2b01,endwait
  2219. .fillcop
  2220.  move.w #$180,d1
  2221.  
  2222.  move.l a0,a1
  2223.  move.l a2,a3
  2224.  move.w #$10c,(a1)+
  2225.  move.w #$10c,(a3)+
  2226.  move.w d3,(a1)+
  2227.  move.w d3,(a3)+
  2228.  eor.w #$8000,d3
  2229.  
  2230.  move.w #$106,(a1)+
  2231.  move.w #$106,(a3)+
  2232.  move.w #$2c42,d5
  2233.  or.w d3,d5
  2234.  and.w #$fffe,d5
  2235.  move.w d5,(a1)+
  2236.  move.w d5,(a3)+
  2237.  bsr do32
  2238.  
  2239.  move.w #$106,(a1)+
  2240.  move.w #$106,(a3)+
  2241.  move.w #$4c42,d5
  2242.  or.w d3,d5
  2243.  and.w #$fffe,d5
  2244.  move.w d5,(a1)+
  2245.  move.w d5,(a3)+
  2246.  bsr do32
  2247.  
  2248.  move.w #$106,(a1)+
  2249.  move.w #$106,(a3)+
  2250.  move.w #$6c42,d5
  2251.  or.w d3,d5
  2252.  and.w #$fffe,d5
  2253.  move.w d5,(a1)+
  2254.  move.w d5,(a3)+
  2255.  bsr do32
  2256.  
  2257.  move.w startwait,(a1)+
  2258.  move.w #$fffe,(a1)+
  2259.  move.w endwait,(a1)+
  2260.  move.w #$ff00,(a1)+
  2261.  move.w startwait,(a3)+
  2262.  move.w #$fffe,(a3)+
  2263.  move.w endwait,(a3)+
  2264.  move.w #$ff00,(a3)+
  2265.  
  2266. ; move.l $1fe0000,(a1)+
  2267. ; move.l $1fe0000,(a3)+
  2268. ; move.l $1fe0000,(a1)+
  2269. ; move.l $1fe0000,(a3)+
  2270.  
  2271.  
  2272.  add.w #$300,startwait
  2273.  add.w #$300,endwait
  2274.  
  2275. ; move.l #$1060c42,(a1)+
  2276. ; move.l #$1060c42,(a3)+
  2277. ; move.w #$19e,(a1)+
  2278. ; move.w (a5),(a1)+
  2279. ; move.w #$19e,(a3)+
  2280. ; move.w (a5)+,(a3)+
  2281.  
  2282. **********************************
  2283.  
  2284.  adda.w #104*4,a0
  2285.  adda.w #104*4,a2
  2286.  dbra d0,.fillcop
  2287.  
  2288.  move.w #$38,fetchstart
  2289.  move.w #$b8,fetchstop
  2290.  move.w #$2c81,winstart
  2291.  move.w #$2cc1,winstop
  2292.  move.w #-40,modulo
  2293.  move.w #-40,modulo+4
  2294.  
  2295.  move.l #nullspr,d0
  2296.  move.w d0,s0l
  2297.  move.w d0,s1l
  2298.  move.w d0,s2l
  2299.  move.w d0,s3l
  2300.  move.w d0,s4l
  2301.  move.w d0,s5l
  2302.  move.w d0,s6l
  2303.  move.w d0,s7l
  2304.  swap d0
  2305.  move.w d0,s0h
  2306.  move.w d0,s1h
  2307.  move.w d0,s2h
  2308.  move.w d0,s3h
  2309.  move.w d0,s4h
  2310.  move.w d0,s5h
  2311.  move.w d0,s6h
  2312.  move.w d0,s7h 
  2313.  
  2314.  move.l #scrn+40,a0
  2315.  move.l #scrn+160,a1
  2316.  move.l #scrn+280,a2
  2317.  move.l #scrntab,a3
  2318.  move.w #319,d7    ; counter
  2319.  move.w #0,d1    ; xpos
  2320. .plotscrnloop:
  2321.  move.b (a3)+,d0
  2322.  move.w d1,d2
  2323.  asr.w #3,d2
  2324.  move.b d1,d3
  2325.  not.b d3
  2326.  bclr.b d3,-40(a0,d2.w)
  2327.  bclr.b d3,(a0,d2.w)
  2328.  bclr.b d3,40(a0,d2.w)
  2329.  bclr.b d3,-40(a1,d2.w)
  2330.  bclr.b d3,(a1,d2.w)
  2331.  bclr.b d3,40(a1,d2.w)
  2332.  bclr.b d3,-40(a2,d2.w)
  2333.  btst #0,d0
  2334.  beq.s .nobp1
  2335.  bset.b d3,-40(a0,d2.w)
  2336. .nobp1:
  2337.  btst #1,d0
  2338.  beq.s .nobp2
  2339.  bset.b d3,(a0,d2.w)
  2340. .nobp2:
  2341.  btst #2,d0
  2342.  beq.s .nobp3
  2343.  bset.b d3,40(a0,d2.w)
  2344. .nobp3:
  2345.  btst #3,d0
  2346.  beq.s .nobp4
  2347.  bset.b d3,-40(a1,d2.w)
  2348. .nobp4:
  2349.  btst #4,d0
  2350.  beq.s .nobp5
  2351.  bset.b d3,(a1,d2.w)
  2352. .nobp5:
  2353.  btst #5,d0
  2354.  beq.s .nobp6
  2355.  bset.b d3,40(a1,d2.w)
  2356. .nobp6:
  2357.  btst #6,d0
  2358.  beq.s .nobp7
  2359.  bset.b d3,-40(a2,d2.w)
  2360. .nobp7:
  2361.  
  2362.  addq #1,d1
  2363.  
  2364.  dbra d7,.plotscrnloop
  2365.  
  2366.  rts
  2367.  
  2368. CLEARKEYBOARD:
  2369.  move.l #KeyMap,a5
  2370.  moveq #0,d0
  2371.  move.w #15,d1
  2372. clrloo:
  2373.  move.l d0,(a5)+
  2374.  move.l d0,(a5)+
  2375.  move.l d0,(a5)+
  2376.  move.l d0,(a5)+
  2377.  dbra d1,clrloo
  2378.  rts
  2379.  
  2380. READCONTROLS: dc.w 0
  2381.  
  2382. tstststst: dc.w 0
  2383.  
  2384. BollocksRoom:
  2385.  dc.w -1
  2386.  ds.l 50
  2387.  
  2388. GUNYOFFS:
  2389.  dc.w 20
  2390.  dc.w 20
  2391.  dc.w 0
  2392.  dc.w 20
  2393.  dc.w 20
  2394.  dc.w 0
  2395.  dc.w 0
  2396.  dc.w 20
  2397.  
  2398. USEPLR1:
  2399.  
  2400. ***********************************
  2401.  
  2402.  move.l PLR1_Obj,a0 
  2403.  move.l ObjectPoints,a1
  2404.  move.l #ObjRotated,a2
  2405.  move.w (a0),d0
  2406.  move.l PLR1_xoff,(a1,d0.w*8)
  2407.  move.l PLR1_zoff,4(a1,d0.w*8)
  2408.  move.l PLR1_Roompt,a1
  2409.  
  2410.  moveq #0,d2
  2411.  move.b damagetaken(a0),d2
  2412.  beq .notbeenshot
  2413.  move.w #$f00,hitcol
  2414.  move.w #$f00,hitcol2
  2415.  sub.w d2,PLR1_energy
  2416.  movem.l d0-d7/a0-a6,-(a7)
  2417.  move.b #$fb,IDNUM
  2418.  move.w #19,Samplenum
  2419.  clr.b notifplaying
  2420.  move.w #0,Noisex
  2421.  move.w #0,Noisez
  2422.  move.w #100,Noisevol
  2423.  jsr MakeSomeNoise
  2424.  
  2425.  movem.l (a7)+,d0-d7/a0-a6
  2426.  
  2427. .notbeenshot
  2428.  move.b #0,damagetaken(a0)
  2429.  move.b PLR1_energy+1,numlives(a0)
  2430.  
  2431.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2432.  
  2433.  move.w (a1),12(a0)
  2434.  move.w (a1),d2
  2435.  move.l #ZoneBrightTable,a1
  2436.  move.l (a1,d2.w*4),d2
  2437.  tst.b PLR1_StoodInTop
  2438.  bne.s .okinbott
  2439.  swap d2
  2440. .okinbott:
  2441.  
  2442.  move.w d2,2(a0)
  2443.  
  2444.  move.l p1_yoff,d0
  2445.  move.l p1_height,d1
  2446.  asr.l #1,d1
  2447.  add.l d1,d0
  2448.  asr.l #7,d0
  2449.  move.w d0,4(a0)
  2450.  
  2451. ***********************************
  2452.  
  2453.  move.l PLR2_Obj,a0 
  2454.  
  2455.  move.w PLR2_angpos,d0
  2456.  and.w #8190,d0
  2457.  move.w d0,Facing(a0)
  2458.  
  2459.  jsr ViewpointToDraw
  2460.  asl.w #2,d0
  2461.  moveq #0,d1
  2462.  move.b p2_bobble,d1
  2463.  not.b d1
  2464.  lsr.b #3,d1
  2465.  and.b #$3,d1
  2466.  add.w d1,d0
  2467.  move.w d0,10(a0)
  2468.  move.w #10,8(a0)
  2469.  
  2470.  move.l ObjectPoints,a1
  2471.  move.l #ObjRotated,a2
  2472.  move.w (a0),d0
  2473.  move.l PLR2_xoff,(a1,d0.w*8)
  2474.  move.l PLR2_zoff,4(a1,d0.w*8)
  2475.  move.l PLR2_Roompt,a1
  2476.  
  2477.  moveq #0,d2
  2478.  move.b damagetaken(a0),d2
  2479.  beq .notbeenshot2
  2480.  sub.w d2,PLR2_energy
  2481. .notbeenshot2
  2482.  move.b #0,damagetaken(a0)
  2483.  move.b PLR2_energy+1,numlives(a0)
  2484.  
  2485.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2486.  
  2487.  move.w (a1),12(a0)
  2488.  move.w (a1),d2
  2489.  move.l #ZoneBrightTable,a1
  2490.  move.l (a1,d2.w*4),d2
  2491.  tst.b PLR2_StoodInTop
  2492.  bne.s .okinbott2
  2493.  swap d2
  2494. .okinbott2:
  2495.  
  2496.  move.w d2,2(a0)
  2497.  
  2498.  move.l p2_yoff,d0
  2499.  move.l p2_height,d1
  2500.  asr.l #1,d1
  2501.  add.l d1,d0
  2502.  asr.l #7,d0
  2503.  move.w d0,4(a0)
  2504.  
  2505. **********************************
  2506.  
  2507.  
  2508.  move.l PLR1_Obj,a0
  2509.  move.w #-1,12+128(a0)
  2510.  
  2511.  rts
  2512.  
  2513. DRAWINGUN:
  2514.  move.l #Objects+9*16,a0
  2515.  move.l 4(a0),a5    ; ptr
  2516.  move.l 8(a0),a2    ; frames
  2517.  move.l 12(a0),a4    ; pal
  2518.  move.l (a0),a0        ; wad
  2519.  
  2520.  move.l #GunAnims,a1
  2521.  move.l (a1,d0.w*8),a1
  2522.  move.w (a1,d1.w*2),d5    ; frame of anim
  2523.  
  2524.  move.l #GUNYOFFS,a1
  2525.  move.w (a1,d0.w*2),d7    ; yoff
  2526.  move.l frompt,a6
  2527.  move.w d7,d6
  2528.  muls #104*4,d6
  2529.  add.l d6,a6    ; screen pointer
  2530.  
  2531.  asl.w #2,d0
  2532.  add.w d5,d0    ; frame
  2533.  move.w (a2,d0.w*4),d1    ; xoff
  2534.  
  2535.  lea (a5,d1.w),a5    ; right ptr
  2536.  
  2537.  move.w #31,d0
  2538.  bsr DRAWCHUNK
  2539.  addq.w #4,a6
  2540.  move.w #31,d0
  2541.  bsr DRAWCHUNK
  2542.  addq.w #4,a6
  2543.  move.w #31,d0
  2544.  bsr DRAWCHUNK
  2545.  rts
  2546.  
  2547.  
  2548. DRAWCHUNK:
  2549.  move.w #78,d3
  2550.  sub.w d7,d3
  2551.  move.l a6,a3
  2552.  move.b (a5),d2
  2553.  move.l (a5)+,d1
  2554.  bne.s .noblank
  2555.  addq #4,a6
  2556.  dbra d0,DRAWCHUNK 
  2557.  rts
  2558.  
  2559. .noblank:
  2560.  and.l #$ffffff,d1
  2561.  lea (a0,d1.l),a1
  2562.  cmp.b #1,d2
  2563.  bgt.s thirdd
  2564.  beq.s secc
  2565. .drawdown:
  2566.  move.w (a1)+,d2
  2567.  and.w #%11111,d2
  2568.  beq.s .itsblank
  2569.  move.w (a4,d2.w*2),(a3)
  2570. .itsblank
  2571.  add.w #104*4,a3
  2572.  dbra d3,.drawdown
  2573.  
  2574.  addq #4,a6
  2575.  dbra d0,DRAWCHUNK
  2576.  rts
  2577.  
  2578. secc:
  2579. .drawdown:
  2580.  move.w (a1)+,d2
  2581.  lsr.w #5,d2
  2582.  and.w #%11111,d2
  2583.  beq.s .itsblank
  2584.  move.w (a4,d2.w*2),(a3)
  2585. .itsblank
  2586.  add.w #104*4,a3
  2587.  dbra d3,.drawdown
  2588.  
  2589.  addq #4,a6
  2590.  dbra d0,DRAWCHUNK
  2591.  rts
  2592.  
  2593. thirdd:
  2594. .drawdown:
  2595.  move.b (a1),d2
  2596.  addq #2,a1
  2597.  lsr.b #2,d2
  2598.  and.w #%11111,d2
  2599.  beq.s .itsblank
  2600.  move.w (a4,d2.w*2),(a3)
  2601. .itsblank
  2602.  add.w #104*4,a3
  2603.  dbra d3,.drawdown
  2604.  
  2605.  addq #4,a6
  2606.  dbra d0,DRAWCHUNK
  2607.  rts
  2608.  
  2609.  
  2610.  
  2611. ***************************************************
  2612. **************************************************
  2613.  
  2614. USEPLR2:
  2615.  
  2616. ***********************************
  2617.  
  2618.  move.l PLR2_Obj,a0 
  2619.  move.l ObjectPoints,a1
  2620.  move.l #ObjRotated,a2
  2621.  move.w (a0),d0
  2622.  move.l PLR2_xoff,(a1,d0.w*8)
  2623.  move.l PLR2_zoff,4(a1,d0.w*8)
  2624.  move.l PLR2_Roompt,a1
  2625.  
  2626.  moveq #0,d2
  2627.  move.b damagetaken(a0),d2
  2628.  beq .notbeenshot
  2629.  move.w #$f00,hitcol
  2630.  move.w #$f00,hitcol2
  2631.  sub.w d2,PLR2_energy
  2632.  movem.l d0-d7/a0-a6,-(a7)
  2633.  move.w #19,Samplenum
  2634.  clr.b notifplaying
  2635.  move.b #$fb,IDNUM
  2636.  move.w #0,Noisex
  2637.  move.w #0,Noisez
  2638.  move.w #100,Noisevol
  2639.  jsr MakeSomeNoise
  2640.  
  2641.  movem.l (a7)+,d0-d7/a0-a6
  2642.  
  2643. .notbeenshot
  2644.  move.b #0,damagetaken(a0)
  2645.  move.b PLR2_energy+1,numlives(a0)
  2646.  
  2647.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2648.  
  2649.  move.w (a1),12(a0)
  2650.  move.w (a1),d2
  2651.  move.l #ZoneBrightTable,a1
  2652.  move.l (a1,d2.w*4),d2
  2653.  tst.b PLR2_StoodInTop
  2654.  bne.s .okinbott
  2655.  swap d2
  2656. .okinbott:
  2657.  
  2658.  move.w d2,2(a0)
  2659.  
  2660.  move.l p2_yoff,d0
  2661.  move.l p2_height,d1
  2662.  asr.l #1,d1
  2663.  add.l d1,d0
  2664.  asr.l #7,d0
  2665.  move.w d0,4(a0)
  2666.  
  2667. ***********************************
  2668.  
  2669.  move.l PLR1_Obj,a0 
  2670.  
  2671.  move.w PLR1_angpos,d0
  2672.  and.w #8190,d0
  2673.  move.w d0,Facing(a0)
  2674.  
  2675.  jsr ViewpointToDraw
  2676.  asl.w #2,d0
  2677.  moveq #0,d1
  2678.  move.b p1_bobble,d1
  2679.  not.b d1
  2680.  lsr.b #3,d1
  2681.  and.b #$3,d1
  2682.  add.w d1,d0
  2683.  move.w d0,10(a0)
  2684.  move.w #10,8(a0)
  2685.  
  2686.  move.l ObjectPoints,a1
  2687.  move.l #ObjRotated,a2
  2688.  move.w (a0),d0
  2689.  move.l PLR1_xoff,(a1,d0.w*8)
  2690.  move.l PLR1_zoff,4(a1,d0.w*8)
  2691.  move.l PLR1_Roompt,a1
  2692.  
  2693.  moveq #0,d2
  2694.  move.b damagetaken(a0),d2
  2695.  beq .notbeenshot2
  2696.  sub.w d2,PLR1_energy
  2697. .notbeenshot2
  2698.  move.b #0,damagetaken(a0)
  2699.  move.b PLR1_energy+1,numlives(a0)
  2700.  
  2701.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2702.  
  2703.  move.w (a1),12(a0)
  2704.  move.w (a1),d2
  2705.  move.l #ZoneBrightTable,a1
  2706.  move.l (a1,d2.w*4),d2
  2707.  tst.b PLR1_StoodInTop
  2708.  bne.s .okinbott2
  2709.  swap d2
  2710. .okinbott2:
  2711.  
  2712.  move.w d2,2(a0)
  2713.  
  2714.  move.l p1_yoff,d0
  2715.  move.l p1_height,d1
  2716.  asr.l #1,d1
  2717.  add.l d1,d0
  2718.  asr.l #7,d0
  2719.  move.w d0,4(a0)
  2720.  
  2721. **********************************
  2722.  
  2723.  move.l PLR2_Obj,a0
  2724.  move.w #-1,12+64(a0)
  2725.  
  2726.  rts
  2727.  
  2728.  
  2729. GunSelected: dc.b 0
  2730.  even
  2731.  
  2732. GunAnims:
  2733.  dc.l MachineAnim,3
  2734.  dc.l PlasmaAnim,5
  2735.  dc.l RocketAnim,5
  2736.  dc.l FlameThrowerAnim,5
  2737.  dc.l GrenadeAnim,12
  2738.  dc.l 0,0
  2739.  dc.l 0,0
  2740.  dc.l ShotGunAnim,12+19+11+20+1
  2741.  
  2742. MachineAnim:
  2743.  dc.w 0,1,2,3
  2744. PlasmaAnim:
  2745.  dc.w 0,1,2,3,3,3
  2746. RocketAnim:
  2747.  dc.w 0,1,2,3,3,3
  2748. FlameThrowerAnim:
  2749.  dc.w 0,1,2,3,3,3
  2750. GrenadeAnim:
  2751.  dc.w 0,1,1,1,1
  2752.  dc.w 2,2,2,2,3
  2753.  dc.w 3,3,3
  2754. ShotGunAnim:
  2755.  dc.w 0
  2756.  dcb.w 12,2
  2757.  dcb.w 19,1
  2758.  dcb.w 11,2
  2759.  dcb.w 20,0
  2760.  dc.w 3
  2761.  
  2762. GunData: dc.l 0
  2763.  
  2764. PLR1_GunData:
  2765. ; 0=Pistol 1=Big Gun
  2766. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2767.  
  2768. ; VISIBLE/INSTANT (0/FF)
  2769. ; damage,gotgun(b)
  2770. ; Delay (w), Lifetime of bullet (w)
  2771. ; Click or hold down (0,1)
  2772. ; BulSpd: (w)
  2773.  
  2774. ;0
  2775.  dc.w 0
  2776. ;2
  2777.  dc.b 8,3
  2778. ;4
  2779.  dc.b 15
  2780. ;5
  2781.  dc.b -1
  2782. ;6
  2783.  dc.b 4,$ff
  2784. ;8
  2785.  dc.w 5,-1,1,0
  2786. ;16
  2787.  dc.w 0,0,0
  2788. ;22
  2789.  dc.w 1
  2790.  
  2791.  ds.w 4
  2792.  
  2793. ;PlasmaGun
  2794.  
  2795.  dc.w 0
  2796.  dc.b 8,1
  2797.  dc.b 20
  2798.  dc.b 0
  2799.  dc.b 16,0
  2800.  dc.w 10,-1,0,5
  2801.  dc.w 0,0,0
  2802.  dc.w 1
  2803.  
  2804.  ds.w 4
  2805.  
  2806. ;RocketLauncher
  2807.  
  2808.  dc.w 0
  2809.  dc.b 8,9
  2810.  dc.b 2
  2811.  dc.b 0
  2812.  dc.b 12,0
  2813.  dc.w 30,-1,0,5
  2814.  dc.w 0,0,0
  2815.  dc.w 1
  2816.  
  2817.  
  2818.  ds.w 4
  2819.  
  2820. ; FlameThrower
  2821.  
  2822.  dc.w 90*8
  2823.  dc.b 1,22
  2824.  dc.b 40
  2825.  dc.b 0
  2826.  dc.b 8,$0    
  2827.  dc.w 5,50,1,4
  2828.  dc.w 0,0,0
  2829.  dc.w 1
  2830.  
  2831.  ds.w 4
  2832.  
  2833. ;Grenade launcher
  2834.  
  2835.  
  2836.  dc.w 0
  2837.  dc.b 8,9
  2838.  dc.b 6
  2839.  dc.b 0
  2840.  dc.b 8,0
  2841.  dc.w 50,100,1,5
  2842.  dc.w 60,3
  2843.  dc.w -1000
  2844.  dc.w 1
  2845.  
  2846.  ds.w 4
  2847.  
  2848. ; WORMGUN
  2849.  
  2850.  dc.w 0
  2851.  dc.b 0,0
  2852.  dc.b 0
  2853.  dc.b 0,0
  2854.  dc.w 0,-1,0,5
  2855.  dc.w 0,0
  2856.  dc.w 0
  2857.  dc.w 1
  2858.  ds.w 4
  2859.  
  2860. ; ToughMarineGun
  2861.  
  2862.  dc.w 0
  2863.  dc.b 0,0
  2864.  dc.b 0
  2865.  dc.b 0,0
  2866.  dc.w 0,-1,0,5
  2867.  dc.w 0,0
  2868.  dc.w 0
  2869.  dc.w 1
  2870.  ds.w 4
  2871.  
  2872. ; Shotgun
  2873.  
  2874. ;0
  2875.  dc.w 0
  2876. ;2
  2877.  dc.b 8,21
  2878. ;4
  2879.  dc.b 15
  2880. ;5
  2881.  dc.b -1
  2882. ;6
  2883.  dc.b 4,0
  2884. ;8
  2885.  dc.w 50,-1,1,0
  2886. ;16
  2887.  dc.w 0,0,0
  2888. ;22
  2889.  dc.w 7
  2890.  
  2891.  ds.w 4
  2892.  
  2893. PLR2_GunData:
  2894. ; 0=Pistol 1=Big Gun
  2895. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2896.  
  2897. ; VISIBLE/INSTANT (0/FF)
  2898. ; damage,gotgun(b)
  2899. ; Delay (w)
  2900.  
  2901. ;0
  2902.  dc.w 0
  2903. ;2
  2904.  dc.b 8,3
  2905. ;4
  2906.  dc.b 15
  2907. ;5
  2908.  dc.b -1
  2909. ;6
  2910.  dc.b 4,$ff
  2911. ;8
  2912.  dc.w 5,-1,1,0
  2913. ;16
  2914.  dc.w 0,0,0
  2915. ;22
  2916.  dc.w 1
  2917.  
  2918.  ds.w 4
  2919.  
  2920. ;PlasmaGun
  2921.  
  2922.  dc.w 0
  2923.  dc.b 8,1
  2924.  dc.b 20
  2925.  dc.b 0
  2926.  dc.b 16,0
  2927.  dc.w 10,-1,0,5
  2928.  dc.w 0,0,0
  2929.  dc.w 1
  2930.  
  2931.  ds.w 4
  2932.  
  2933. ;RocketLauncher
  2934.  
  2935.  dc.w 0
  2936.  dc.b 8,9
  2937.  dc.b 2
  2938.  dc.b 0
  2939.  dc.b 12,0
  2940.  dc.w 30,-1,0,5
  2941.  dc.w 0,0,0
  2942.  dc.w 1
  2943.  
  2944.  
  2945.  ds.w 4
  2946.  
  2947. ; FlameThrower
  2948.  
  2949.  dc.w 90*8
  2950.  dc.b 1,22
  2951.  dc.b 40
  2952.  dc.b 0
  2953.  dc.b 8,$0    
  2954.  dc.w 5,50,1,4
  2955.  dc.w 0,0,0
  2956.  dc.w 1
  2957.  
  2958.  ds.w 4
  2959.  
  2960. ;Grenade launcher
  2961.  
  2962.  
  2963.  dc.w 0
  2964.  dc.b 8,9
  2965.  dc.b 6
  2966.  dc.b 0
  2967.  dc.b 8,0
  2968.  dc.w 50,100,1,5
  2969.  dc.w 60,3
  2970.  dc.w -1000
  2971.  dc.w 1
  2972.  
  2973.  ds.w 4
  2974.  
  2975. ; WORMGUN
  2976.  
  2977.  dc.w 0
  2978.  dc.b 0,0
  2979.  dc.b 0
  2980.  dc.b 0,0
  2981.  dc.w 0,-1,0,5
  2982.  dc.w 0,0
  2983.  dc.w 0
  2984.  dc.w 1
  2985.  ds.w 4
  2986.  
  2987. ; ToughMarineGun
  2988.  
  2989.  dc.w 0
  2990.  dc.b 0,0
  2991.  dc.b 0
  2992.  dc.b 0,0
  2993.  dc.w 0,-1,0,5
  2994.  dc.w 0,0
  2995.  dc.w 0
  2996.  dc.w 1
  2997.  ds.w 4
  2998.  
  2999. ; Shotgun
  3000.  
  3001. ;0
  3002.  dc.w 0
  3003. ;2
  3004.  dc.b 8,21
  3005. ;4
  3006.  dc.b 15
  3007. ;5
  3008.  dc.b -1
  3009. ;6
  3010.  dc.b 4,0
  3011. ;8
  3012.  dc.w 50,-1,1,0
  3013. ;16
  3014.  dc.w 0,0,0
  3015. ;22
  3016.  dc.w 7
  3017.  
  3018.  ds.w 4
  3019.  
  3020.  
  3021.  
  3022. protA: dc.w 0
  3023.  
  3024. Path:
  3025. ; incbin "testpath"
  3026. endpath:
  3027. pathpt: dc.l Path
  3028.  
  3029.  
  3030. PLR1KEYS: dc.b 0
  3031. PLR1PATH: dc.b 0
  3032. PLR1MOUSE: dc.b -1
  3033. PLR1JOY: dc.b 0
  3034. PLR2KEYS: dc.b 0
  3035. PLR2PATH: dc.b 0
  3036. PLR2MOUSE: dc.b -1
  3037. PLR2JOY: dc.b 0
  3038.  
  3039.  even
  3040.  
  3041. PLR1_bobble: dc.w 0
  3042. PLR2_bobble: dc.w 0
  3043. xwobble: dc.l 0
  3044. xwobxoff: dc.w 0
  3045.  
  3046. xwobzoff: dc.w 0
  3047.  
  3048. PLR1_Control:
  3049.  
  3050. ; Take a snapshot of everything.
  3051.  
  3052.  move.l PLR1_xoff,d2
  3053.  move.l d2,PLR1_oldxoff
  3054.  move.l d2,oldx
  3055.  move.l PLR1_zoff,d3
  3056.  move.l d3,PLR1_oldzoff
  3057.  move.l d3,oldz
  3058.  move.l p1_xoff,d0
  3059.  move.l d0,PLR1_xoff
  3060.  move.l d0,newx
  3061.  move.l p1_zoff,d1
  3062.  move.l d1,newz
  3063.  move.l d1,PLR1_zoff
  3064.  
  3065.  move.l p1_height,PLR1_height
  3066.  
  3067.  sub.l d2,d0
  3068.  sub.l d3,d1
  3069.  move.l d0,xdiff
  3070.  move.l d1,zdiff
  3071.  move.w p1_angpos,d0
  3072.  move.w d0,PLR1_angpos
  3073.  
  3074.  move.l #SineTable,a1
  3075.  move.w (a1,d0.w),PLR1_sinval
  3076.  add.w #2048,d0
  3077.  and.w #8190,d0
  3078.  move.w (a1,d0.w),PLR1_cosval
  3079.  
  3080.  move.l p1_yoff,d0
  3081.  move.w p1_bobble,d1
  3082.  move.w (a1,d1.w),d1
  3083.  move.w d1,d3
  3084.  ble.s notnegative
  3085.  neg.w d1
  3086. notnegative:
  3087.  add.w #16384,d1
  3088.  asr.w #4,d1
  3089.  
  3090.  tst.b PLR1_Ducked
  3091.  bne.s .notdouble
  3092.  add.w d1,d1
  3093. .notdouble
  3094.  ext.l d1
  3095.  move.l PLR1_height,d4
  3096.  sub.l d1,d4
  3097.  add.l d1,d0
  3098.  
  3099.  cmp.b #'s',mors
  3100.  beq.s .otherwob
  3101.  asr.w #6,d3
  3102.  ext.l d3
  3103.  move.l d3,xwobble
  3104.  move.w PLR1_sinval,d1
  3105.  muls d3,d1
  3106.  move.w PLR1_cosval,d2
  3107.  muls d3,d2
  3108.  swap d1
  3109.  swap d2
  3110.  asr.w #7,d1
  3111.  move.w d1,xwobxoff
  3112.  asr.w #7,d2
  3113.  neg.w d2
  3114.  move.w d2,xwobzoff
  3115. .otherwob
  3116.  
  3117.  move.l d0,PLR1_yoff
  3118.  move.l d0,newy
  3119.  move.l d0,oldy
  3120.  
  3121.  move.l d4,thingheight
  3122.  move.l #40*256,StepUpVal
  3123.  tst.b PLR1_Ducked
  3124.  beq.s .okbigstep
  3125.  move.l #10*256,StepUpVal
  3126. .okbigstep:
  3127.  
  3128.  move.l #$1000000,StepDownVal
  3129.  
  3130.  move.l PLR1_Roompt,a0
  3131.  move.w ToTelZone(a0),d0
  3132.  blt .noteleport
  3133.  
  3134.  move.w ToTelX(a0),newx
  3135.  move.w ToTelZ(a0),newz
  3136.  move.w #-1,CollId
  3137.  move.l #%111111111111111111,CollideFlags
  3138.  bsr Collision
  3139.  tst.b hitwall
  3140.  beq.s .teleport
  3141.  
  3142.  move.w PLR1_xoff,newx
  3143.  move.w PLR1_zoff,newz
  3144.  bra .noteleport
  3145.  
  3146. .teleport:
  3147.  
  3148.  move.l PLR1_Roompt,a0
  3149.  move.w ToTelZone(a0),d0
  3150.  move.w ToTelX(a0),PLR1_xoff
  3151.  move.w ToTelZ(a0),PLR1_zoff
  3152.  move.l PLR1_yoff,d1
  3153.  sub.l ToZoneFloor(a0),d1
  3154.  move.l ZoneAdds,a0
  3155.  move.l (a0,d0.w*4),a0
  3156.  add.l LEVELDATA,a0
  3157.  move.l a0,PLR1_Roompt
  3158.  add.l ToZoneFloor(a0),d1
  3159.  move.l d1,PLR1s_yoff
  3160.  move.l d1,PLR1_yoff
  3161.  move.l d1,PLR1s_tyoff
  3162.  move.l PLR1_xoff,PLR1s_xoff
  3163.  move.l PLR1_zoff,PLR1s_zoff
  3164.  
  3165.  SAVEREGS
  3166.  move.w #0,Noisex
  3167.  move.w #0,Noisez
  3168.  move.w #26,Samplenum
  3169.  move.w #100,Noisevol
  3170.  move.b #$fa,IDNUM
  3171.  jsr MakeSomeNoise
  3172.  GETREGS
  3173.  
  3174.  bra .cantmove
  3175.  
  3176. .noteleport:
  3177.  
  3178.  move.l PLR1_Roompt,objroom
  3179.  move.w #%100000000,wallflags
  3180.  move.b PLR1_StoodInTop,StoodInTop
  3181.  
  3182.  move.l #%1011111110111000001,CollideFlags
  3183.  move.w #-1,CollId
  3184.  
  3185.  bsr Collision
  3186.  tst.b hitwall
  3187.  beq.s .nothitanything
  3188.  move.w oldx,PLR1_xoff
  3189.  move.w oldz,PLR1_zoff
  3190.  move.l PLR1_xoff,PLR1s_xoff
  3191.  move.l PLR1_zoff,PLR1s_zoff
  3192.  bra .cantmove
  3193. .nothitanything:
  3194.  
  3195.  move.w #40,extlen
  3196.  move.b #0,awayfromwall
  3197.  
  3198.  clr.b exitfirst
  3199.  clr.b wallbounce
  3200.  bsr MoveObject
  3201.  move.b StoodInTop,PLR1_StoodInTop
  3202.  move.l objroom,PLR1_Roompt
  3203.  move.w newx,PLR1_xoff
  3204.  move.w newz,PLR1_zoff
  3205.  move.l PLR1_xoff,PLR1s_xoff
  3206.  move.l PLR1_zoff,PLR1s_zoff
  3207.  
  3208. .cantmove:
  3209.  
  3210.  move.l PLR1_Roompt,a0
  3211.  
  3212.  move.l ToZoneFloor(a0),d0
  3213.  tst.b PLR1_StoodInTop
  3214.  beq.s notintop
  3215.  move.l ToUpperFloor(a0),d0
  3216. notintop:
  3217.  
  3218.  adda.w #ToZonePts,a0
  3219.  sub.l PLR1_height,d0
  3220.  move.l d0,PLR1s_tyoff
  3221.  move.w p1_angpos,tmpangpos
  3222.  
  3223. ; move.l (a0),a0        ; jump to viewpoint list
  3224.  * A0 is pointing at a pointer to list of points to rotate
  3225.  move.w (a0)+,d1
  3226.  ext.l d1
  3227.  add.l PLR1_Roompt,d1
  3228.  move.l d1,PLR1_PointsToRotatePtr
  3229.  tst.w (a0)+
  3230.  sne.s DRAWNGRAPHTOP
  3231.  beq.s nobackgraphics
  3232.  cmp.b #'s',mors
  3233.  beq.s nobackgraphics
  3234.  move.l a0,-(a7)
  3235.  jsr putinbackdrop 
  3236.  move.l (a7)+,a0
  3237. nobackgraphics:
  3238.  adda.w #10,a0
  3239.  move.l a0,PLR1_ListOfGraphRooms
  3240.  
  3241. *************************************************
  3242.  rts
  3243.  
  3244. DRAWNGRAPHTOP
  3245.  
  3246. tstzone: dc.l 0
  3247. CollId: dc.w 0
  3248.  
  3249. PLR2_Control:
  3250.  
  3251. ; Take a snapshot of everything.
  3252.  
  3253.  move.l PLR2_xoff,d2
  3254.  move.l d2,PLR2_oldxoff
  3255.  move.l d2,oldx
  3256.  move.l PLR2_zoff,d3
  3257.  move.l d3,PLR2_oldzoff
  3258.  move.l d3,oldz
  3259.  move.l p2_xoff,d0
  3260.  move.l d0,PLR2_xoff
  3261.  move.l d0,newx
  3262.  move.l p2_zoff,d1
  3263.  move.l d1,newz
  3264.  move.l d1,PLR2_zoff
  3265.  
  3266.  move.l p2_height,PLR2_height
  3267.  
  3268.  sub.l d2,d0
  3269.  sub.l d3,d1
  3270.  move.l d0,xdiff
  3271.  move.l d1,zdiff
  3272.  move.w p2_angpos,d0
  3273.  move.w d0,PLR2_angpos
  3274.  
  3275.  move.l #SineTable,a1
  3276.  move.w (a1,d0.w),PLR2_sinval
  3277.  add.w #2048,d0
  3278.  and.w #8190,d0
  3279.  move.w (a1,d0.w),PLR2_cosval
  3280.  
  3281.  move.l p2_yoff,d0
  3282.  move.w p2_bobble,d1
  3283.  move.w (a1,d1.w),d1
  3284.  move.w d1,d3
  3285.  ble.s .notnegative
  3286.  neg.w d1
  3287. .notnegative:
  3288.  add.w #16384,d1
  3289.  asr.w #4,d1
  3290.  add.w d1,d1
  3291.  ext.l d1
  3292.  move.l PLR2_height,d4
  3293.  sub.l d1,d4
  3294.  add.l d1,d0
  3295.  
  3296.  cmp.b #'s',mors
  3297.  bne.s .otherwob
  3298.  asr.w #6,d3
  3299.  ext.l d3
  3300.  move.l d3,xwobble
  3301.  move.w PLR2_sinval,d1
  3302.  muls d3,d1
  3303.  move.w PLR2_cosval,d2
  3304.  muls d3,d2
  3305.  swap d1
  3306.  swap d2
  3307.  asr.w #7,d1
  3308.  move.w d1,xwobxoff
  3309.  asr.w #7,d2
  3310.  neg.w d2
  3311.  move.w d2,xwobzoff
  3312. .otherwob
  3313.  
  3314.  move.l d0,PLR2_yoff
  3315.  move.l d0,newy
  3316.  move.l d0,oldy
  3317.  
  3318.  move.l d4,thingheight
  3319.  move.l #40*256,StepUpVal
  3320.  tst.b PLR2_Ducked
  3321.  beq.s .okbigstep
  3322.  move.l #10*256,StepUpVal
  3323. .okbigstep:
  3324.  
  3325.  move.l #$1000000,StepDownVal
  3326.  
  3327.  move.l PLR2_Roompt,a0
  3328.  move.w ToTelZone(a0),d0
  3329.  blt .noteleport
  3330.  
  3331.  move.w ToTelX(a0),newx
  3332.  move.w ToTelZ(a0),newz
  3333.  move.w #-1,CollId
  3334.  move.l #%111111111111111111,CollideFlags
  3335.  bsr Collision
  3336.  tst.b hitwall
  3337.  beq.s .teleport
  3338.  
  3339.  move.w PLR2_xoff,newx
  3340.  move.w PLR2_zoff,newz
  3341.  bra .noteleport
  3342.  
  3343. .teleport:
  3344.  
  3345.  move.l PLR2_Roompt,a0
  3346.  move.w ToTelZone(a0),d0
  3347.  move.w ToTelX(a0),PLR2_xoff
  3348.  move.w ToTelZ(a0),PLR2_zoff
  3349.  move.l PLR2_yoff,d1
  3350.  sub.l ToZoneFloor(a0),d1
  3351.  move.l ZoneAdds,a0
  3352.  move.l (a0,d0.w*4),a0
  3353.  add.l LEVELDATA,a0
  3354.  move.l a0,PLR2_Roompt
  3355.  add.l ToZoneFloor(a0),d1
  3356.  move.l d1,PLR2s_yoff
  3357.  move.l d1,PLR2_yoff
  3358.  move.l d1,PLR2s_tyoff
  3359.  move.l PLR2_xoff,PLR2s_xoff
  3360.  move.l PLR2_zoff,PLR2s_zoff
  3361.  
  3362.  SAVEREGS
  3363.  move.w #0,Noisex
  3364.  move.w #0,Noisez
  3365.  move.w #26,Samplenum
  3366.  move.w #100,Noisevol
  3367.  move.b #$fa,IDNUM
  3368.  jsr MakeSomeNoise
  3369.  GETREGS
  3370.  
  3371.  bra .cantmove
  3372.  
  3373. .noteleport:
  3374.  
  3375.  move.l PLR2_Roompt,objroom
  3376.  move.w #%100000000000,wallflags
  3377.  move.b PLR2_StoodInTop,StoodInTop
  3378.  
  3379.  move.l #%1011111010111100001,CollideFlags
  3380.  move.w #-1,CollId
  3381.  
  3382.  bsr Collision
  3383.  tst.b hitwall
  3384.  beq.s .nothitanything
  3385.  move.w oldx,PLR2_xoff
  3386.  move.w oldz,PLR2_zoff
  3387.  move.l PLR2_xoff,PLR2s_xoff
  3388.  move.l PLR2_zoff,PLR2s_zoff
  3389.  bra .cantmove
  3390. .nothitanything:
  3391.  
  3392.  move.w #40,extlen
  3393.  move.b #0,awayfromwall
  3394.  
  3395.  clr.b exitfirst
  3396.  clr.b wallbounce
  3397.  bsr MoveObject
  3398.  move.b StoodInTop,PLR2_StoodInTop
  3399.  move.l objroom,PLR2_Roompt
  3400.  move.w newx,PLR2_xoff
  3401.  move.w newz,PLR2_zoff
  3402.  move.l PLR2_xoff,PLR2s_xoff
  3403.  move.l PLR2_zoff,PLR2s_zoff
  3404.  
  3405. .cantmove
  3406.  
  3407.  move.l PLR2_Roompt,a0
  3408.  
  3409.  move.l ToZoneFloor(a0),d0
  3410.  tst.b PLR2_StoodInTop
  3411.  beq.s .notintop
  3412.  move.l ToUpperFloor(a0),d0
  3413. .notintop:
  3414.  
  3415.  adda.w #ToZonePts,a0
  3416.  sub.l PLR2_height,d0
  3417.  move.l d0,PLR2s_tyoff
  3418.  move.w p2_angpos,tmpangpos
  3419.  
  3420. ; move.l (a0),a0        ; jump to viewpoint list
  3421.  * A0 is pointing at a pointer to list of points to rotate
  3422.  move.w (a0)+,d1
  3423.  ext.l d1
  3424.  add.l PLR2_Roompt,d1
  3425.  move.l d1,PLR2_PointsToRotatePtr
  3426.  tst.w (a0)+
  3427.  beq.s .nobackgraphics
  3428.  cmp.b #'s',mors
  3429.  bne.s .nobackgraphics
  3430.  move.l a0,-(a7)
  3431.  jsr putinbackdrop 
  3432.  move.l (a7)+,a0
  3433. .nobackgraphics:
  3434.  adda.w #10,a0
  3435.  move.l a0,PLR2_ListOfGraphRooms
  3436.  
  3437. *****************************************************
  3438.  
  3439.  rts
  3440.  
  3441.  
  3442. KeyMap: ds.b 256
  3443.  
  3444. fillscrnwater:
  3445.  dc.w 0
  3446. DONTDOGUN:
  3447.  dc.w 0
  3448.  
  3449.  
  3450. DrawDisplay:
  3451.  
  3452.  
  3453.  clr.b fillscrnwater
  3454.  
  3455.  move.l #SineTable,a0
  3456.  move.w angpos,d0
  3457.  move.w (a0,d0.w),d6
  3458.  adda.w #2048,a0
  3459.  move.w (a0,d0.w),d7
  3460.  move.w d6,sinval
  3461.  move.w d7,cosval
  3462.  
  3463.  move.l #KeyMap,a5
  3464.  moveq #0,d5
  3465.  move.b look_behind_key,d5
  3466.  tst.b (a5,d5.w)
  3467.  sne DONTDOGUN
  3468.  beq.s .nolookback
  3469.  neg.w cosval
  3470.  neg.w sinval
  3471. .nolookback:
  3472.  
  3473.  
  3474.  move.l yoff,d0
  3475.  asr.l #8,d0
  3476.  move.w d0,d1
  3477.  add.w #256-32,d1
  3478.  and.w #255,d1
  3479.  move.w d1,wallyoff
  3480.  asl.w #2,d0
  3481.  move.w d0,flooryoff
  3482.  
  3483.  move.w xoff,d6
  3484.  move.w d6,d3
  3485.  asr.w #1,d3
  3486.  add.w d3,d6
  3487.  asr.w #1,d6
  3488.  move.w d6,xoff34
  3489.  
  3490.  move.w zoff,d6
  3491.  move.w d6,d3
  3492.  asr.w #1,d3
  3493.  add.w d3,d6
  3494.  asr.w #1,d6
  3495.  move.w d6,zoff34
  3496.  
  3497.  bsr RotateLevelPts
  3498.  bsr RotateObjectPts
  3499.  bsr CalcPLR1InLine
  3500.  
  3501.  
  3502.  cmp.b #'n',mors
  3503.  bne.s doplr2too
  3504.  move.l PLR2_Obj,a0
  3505.  move.w #-1,12(a0)
  3506.  move.w #-1,GraphicRoom(a0)
  3507.  bra noplr2either
  3508.  
  3509. doplr2too:
  3510.  bsr CalcPLR2InLine
  3511. noplr2either:
  3512.  
  3513.  move.l endoflist,a0
  3514. subroomloop:
  3515.  move.w -(a0),d7
  3516.  blt jumpoutofrooms
  3517.  
  3518. ; bsr setlrclip
  3519. ; move.w leftclip,d0
  3520. ; cmp.w rightclip,d0
  3521. ; bge subroomloop
  3522.  move.l a0,-(a7)
  3523.  
  3524.  move.l ZoneAdds,a0
  3525.  move.l (a0,d7.w*4),a0
  3526.  add.l LEVELDATA,a0
  3527.  move.l ToZoneRoof(a0),SplitHeight
  3528.  move.l a0,ROOMBACK
  3529.  
  3530.  move.l ZoneGraphAdds,a0
  3531.  move.l 4(a0,d7.w*8),a2
  3532.  move.l (a0,d7.w*8),a0
  3533.  
  3534.  add.l LEVELGRAPHICS,a0
  3535.  add.l LEVELGRAPHICS,a2
  3536.  move.l a2,ThisRoomToDraw+4
  3537.  move.l a0,ThisRoomToDraw
  3538.  
  3539.  move.l ListOfGraphRooms,a1
  3540.  
  3541.  
  3542.  
  3543. finditit:
  3544.  tst.w (a1)
  3545.  blt nomoretodoatall
  3546.  cmp.w (a1),d7
  3547.  beq outoffind
  3548.  adda.w #8,a1
  3549.  bra finditit
  3550.  
  3551. outoffind:
  3552.  
  3553.  move.l a1,-(a7)
  3554.  
  3555.  
  3556.  move.w #0,leftclip
  3557.  move.w #96,rightclip
  3558.  moveq #0,d7
  3559.  move.w 2(a1),d7
  3560.  blt.s outofrcliplop
  3561.  move.l LEVELCLIPS,a0
  3562.  lea (a0,d7.l*2),a0
  3563.  
  3564.  tst.w (a0)
  3565.  blt outoflcliplop
  3566.  
  3567.  bsr NEWsetlclip
  3568.  
  3569. intolcliplop:        ; clips
  3570.  tst.w (a0)
  3571.  blt outoflcliplop
  3572.  
  3573.  bsr NEWsetlclip 
  3574.  bra intolcliplop
  3575.  
  3576. outoflcliplop:
  3577.  
  3578.  addq #2,a0
  3579.  
  3580.  tst.w (a0)
  3581.  blt outofrcliplop
  3582.  
  3583.  bsr NEWsetrclip
  3584.  
  3585. intorcliplop:        ; clips
  3586.  tst.w (a0)
  3587.  blt outofrcliplop
  3588.  
  3589.  bsr NEWsetrclip 
  3590.  bra intorcliplop
  3591.  
  3592. outofrcliplop:
  3593.  
  3594.  
  3595.  move.w leftclip,d0
  3596.  cmp.w #96,d0
  3597.  bge dontbothercantseeit
  3598.  move.w rightclip,d1
  3599.  blt dontbothercantseeit
  3600.  cmp.w d1,d0
  3601.  bge dontbothercantseeit
  3602.  
  3603.  move.l yoff,d0
  3604.  cmp.l SplitHeight,d0
  3605.  blt botfirst
  3606.  
  3607.  move.l ThisRoomToDraw+4,a0
  3608.  cmp.l LEVELGRAPHICS,a0
  3609.  beq.s noupperroom
  3610.  st DOUPPER
  3611.  
  3612.  move.l ROOMBACK,a1
  3613.  move.l ToUpperRoof(a1),TOPOFROOM
  3614.  move.l ToUpperFloor(a1),BOTOFROOM
  3615.  
  3616.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3617.  bsr dothisroom
  3618. noupperroom:
  3619.  move.l ThisRoomToDraw,a0
  3620.  clr.b DOUPPER
  3621.  move.l #CurrentPointBrights,PointBrightsPtr
  3622.  
  3623.  move.l ROOMBACK,a1
  3624.  move.l ToZoneRoof(a1),d0
  3625.  move.l d0,TOPOFROOM
  3626.  move.l ToZoneFloor(a1),d1
  3627.  move.l d1,BOTOFROOM
  3628.  
  3629.  move.l ToZoneWater(a1),d2
  3630.  cmp.l yoff,d2
  3631.  blt.s .abovefirst
  3632.  move.l d2,BEFOREWATTOP
  3633.  move.l d1,BEFOREWATBOT
  3634.  move.l d2,AFTERWATBOT
  3635.  move.l d0,AFTERWATTOP
  3636.  bra.s .belowfirst
  3637. .abovefirst:
  3638.  move.l d0,BEFOREWATTOP
  3639.  move.l d2,BEFOREWATBOT
  3640.  move.l d1,AFTERWATBOT
  3641.  move.l d2,AFTERWATTOP
  3642. .belowfirst:
  3643.  
  3644.  bsr dothisroom
  3645.  
  3646.  bra dontbothercantseeit
  3647. botfirst:
  3648.  
  3649.  move.l ThisRoomToDraw,a0
  3650.  clr.b DOUPPER
  3651.  move.l #CurrentPointBrights,PointBrightsPtr
  3652.  
  3653.  move.l ROOMBACK,a1
  3654.  move.l ToZoneRoof(a1),d0
  3655.  move.l d0,TOPOFROOM
  3656.  move.l ToZoneFloor(a1),d1
  3657.  move.l d1,BOTOFROOM
  3658.  
  3659.  move.l ToZoneWater(a1),d2
  3660.  cmp.l yoff,d2
  3661.  blt.s .abovefirst
  3662.  move.l d2,BEFOREWATTOP
  3663.  move.l d1,BEFOREWATBOT
  3664.  move.l d2,AFTERWATBOT
  3665.  move.l d0,AFTERWATTOP
  3666.  bra.s .belowfirst
  3667. .abovefirst:
  3668.  move.l d0,BEFOREWATTOP
  3669.  move.l d2,BEFOREWATBOT
  3670.  move.l d1,AFTERWATBOT
  3671.  move.l d2,AFTERWATTOP
  3672. .belowfirst:
  3673.  
  3674.  
  3675.  bsr dothisroom
  3676.  move.l ThisRoomToDraw+4,a0
  3677.  cmp.l LEVELGRAPHICS,a0
  3678.  beq.s noupperroom2
  3679.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3680.  
  3681.  move.l ROOMBACK,a1
  3682.  move.l ToUpperRoof(a1),TOPOFROOM
  3683.  move.l ToUpperFloor(a1),BOTOFROOM
  3684.  
  3685.  st DOUPPER
  3686.  bsr dothisroom
  3687. noupperroom2:
  3688.  
  3689. dontbothercantseeit:
  3690. pastemp:
  3691.  
  3692.  move.l (a7)+,a1
  3693.  move.l ThisRoomToDraw,a0
  3694.  move.w (a0),d7
  3695.  
  3696.  adda.w #8,a1
  3697.  bra finditit
  3698.  
  3699. nomoretodoatall:
  3700.  
  3701.  move.l (a7)+,a0
  3702.  
  3703.  bra subroomloop
  3704.  
  3705. jumpoutofrooms:
  3706.  
  3707.  tst.b DONTDOGUN
  3708.  bne NOGUNLOOK
  3709.  
  3710.  cmp.b #'s',mors
  3711.  beq.s drawslavegun
  3712.  
  3713.  moveq #0,d0
  3714.  move.b PLR1_GunSelected,d0
  3715.  moveq #0,d1
  3716.  move.b PLR1_GunFrame,d1
  3717.  bsr DRAWINGUN
  3718.  bra drawngun
  3719.  
  3720. drawslavegun
  3721.  moveq #0,d0
  3722.  move.b PLR2_GunSelected,d0
  3723.  moveq #0,d1
  3724.  move.b PLR2_GunFrame,d1
  3725.  bsr DRAWINGUN
  3726.  
  3727. drawngun:
  3728.  
  3729. NOGUNLOOK:
  3730.  
  3731.  moveq #0,d1
  3732.  move.b PLR1_GunFrame,d1
  3733.  sub.w TempFrames,d1
  3734.  bgt.s .nn
  3735.  moveq #0,d1
  3736. .nn
  3737.  move.b d1,PLR1_GunFrame
  3738.  
  3739.  ble.s .donefire
  3740.  sub.b #1,PLR1_GunFrame
  3741. .donefire:
  3742.  
  3743.  moveq #0,d1
  3744.  move.b PLR2_GunFrame,d1
  3745.  sub.w TempFrames,d1
  3746.  bgt.s .nn2
  3747.  moveq #0,d1
  3748. .nn2
  3749.  move.b d2,PLR2_GunFrame
  3750.  
  3751.  ble.s .donefire2
  3752.  sub.b #1,PLR2_GunFrame
  3753. .donefire2:
  3754.  
  3755.  
  3756.  move.w #3,d5
  3757.  tst.b fillscrnwater
  3758.  beq nowaterfull
  3759.  bgt oknothalf
  3760.  moveq #1,d5
  3761. oknothalf:
  3762.  
  3763.  bclr.b #1,$bfe001
  3764.  
  3765.  move.l #brightentab,a2
  3766.  moveq #0,d2
  3767.  move.l frompt,a0
  3768.  add.l #104*4*60,a0
  3769.  
  3770.  move.w #31,d0
  3771. fw:
  3772.  move.w d5,d1
  3773.  move.l a0,a1
  3774. fwd:
  3775. val SET 104*4*19
  3776.  REPT 20
  3777.  and.w #$ff,val(a1)
  3778. val SET val-104*4
  3779.  ENDR
  3780.  sub.l #104*4*20,a1
  3781.  dbra d1,fwd
  3782.  addq #4,a0
  3783.  dbra d0,fw
  3784.  
  3785.  addq #4,a0
  3786.  
  3787.  move.w #31,d0
  3788. sw:
  3789.  move.w d5,d1
  3790.  move.l a0,a1
  3791. swd:
  3792. val SET 104*4*19
  3793.  REPT 20
  3794.  and.w #$ff,val(a1)
  3795. val SET val-104*4
  3796.  ENDR
  3797.  sub.l #104*4*20,a1
  3798.  dbra d1,swd
  3799.  addq #4,a0
  3800.  dbra d0,sw
  3801.  
  3802.  addq #4,a0
  3803.  
  3804.  move.w #31,d0
  3805. tw:
  3806.  move.w d5,d1
  3807.  move.l a0,a1
  3808. twd:
  3809. val SET 104*4*19
  3810.  REPT 20
  3811.  and.w #$ff,val(a1)
  3812. val SET val-104*4
  3813.  ENDR
  3814.  sub.l #104*4*20,a1
  3815.  dbra d1,twd
  3816.  addq #4,a0
  3817.  dbra d0,tw
  3818.  
  3819.  rts
  3820.  
  3821. nowaterfull:
  3822.  bset.b #1,$bfe001
  3823.  rts
  3824.  
  3825. prot9: dc.w 0
  3826.  
  3827. TempBuffer: ds.l 100 
  3828.  
  3829. ClipTable: ds.l 30
  3830. EndOfClipPt: dc.l 0
  3831. DOUPPER: dc.w 0
  3832.  
  3833. RealTable:
  3834.  dc.l prot1-78935450
  3835.  dc.l prot2-78935450
  3836.  dc.l prot3-78935450
  3837.  dc.l prot4-78935450
  3838.  dc.l prot5-78935450
  3839.  dc.l prot6-78935450
  3840.  dc.l prot7-78935450
  3841.  dc.l prot8-78935450
  3842.  dc.l prot9-78935450
  3843.  dc.l protA-78935450
  3844.  
  3845. dothisroom
  3846.  
  3847.  move.w (a0)+,d0
  3848.  move.w d0,currzone
  3849.  move.l #ZoneBrightTable,a1
  3850.  move.l (a1,d0.w*4),d1
  3851.  tst.b DOUPPER
  3852.  bne.s .okbot
  3853.  swap d1
  3854. .okbot:
  3855.  move.w d1,ZoneBright
  3856.  
  3857. polyloop:
  3858.  move.w (a0)+,d0
  3859.  blt jumpoutofloop
  3860.  beq itsawall
  3861.  cmp.w #3,d0
  3862.  beq itsasetclip
  3863.  blt itsafloor
  3864.  cmp.w #4,d0
  3865.  beq itsanobject
  3866.  cmp.w #5,d0
  3867.  beq.s itsanarc
  3868.  cmp.w #6,d0
  3869.  beq itsalightbeam
  3870.  cmp.w #7,d0
  3871.  beq.s itswater
  3872.  cmp.w #9,d0
  3873.  ble itsachunkyfloor
  3874.  cmp.w #11,d0
  3875.  ble.s itsabumpyfloor
  3876.  cmp.w #12,d0
  3877.  beq.s itsbackdrop
  3878.  cmp.w #13,d0
  3879.  beq.s itsaseewall
  3880.  
  3881.  bra polyloop
  3882.  
  3883. itsaseewall:
  3884.  st seethru
  3885.  jsr itsawalldraw
  3886.  bra polyloop
  3887.  
  3888. itsbackdrop:
  3889.  jsr putinbackdrop
  3890.  bra polyloop
  3891.  
  3892. itswater:
  3893.  move.w #3,d0
  3894.  clr.b gourfloor
  3895.  move.l #FloorLine,LineToUse
  3896.  st usewater
  3897.  clr.b usebumps
  3898.  jsr itsafloordraw
  3899.  bra polyloop
  3900.  
  3901. itsanarc:
  3902.  jsr CurveDraw
  3903.  bra polyloop
  3904.  
  3905. itsanobject:
  3906.  jsr ObjDraw
  3907.  bra polyloop
  3908.  
  3909. itsalightbeam:
  3910.  jsr LightDraw
  3911.  bra polyloop
  3912.  
  3913. itsabumpyfloor:
  3914.  sub.w #9,d0
  3915.  st usebumps
  3916.  st smoothbumps
  3917.  clr.b usewater
  3918.  move.l #BumpLine,LineToUse
  3919.  jsr itsafloordraw
  3920.  bra polyloop
  3921.  
  3922. itsachunkyfloor:
  3923.  subq.w #7,d0
  3924.  st usebumps
  3925.  sub.w #12,topclip
  3926. ; add.w #10,botclip
  3927.  clr.b smoothbumps
  3928.  clr.b usewater
  3929.  move.l #BumpLine,LineToUse
  3930.  jsr itsafloordraw
  3931.  add.w #12,topclip
  3932. ; sub.w #10,botclip
  3933.  bra polyloop 
  3934.  
  3935. itsafloor:
  3936.  
  3937.  move.l THEFLOORLINE,LineToUse
  3938. * 1,2 = floor/roof
  3939.  clr.b usewater
  3940.  clr.b usebumps
  3941.  move.b GOURSEL,gourfloor    
  3942.  jsr itsafloordraw
  3943.  bra polyloop
  3944. itsasetclip:
  3945.  bra polyloop
  3946. itsawall:
  3947.  clr.b seethru
  3948. ; move.l #stripbuffer,a1
  3949.  jsr itsawalldraw
  3950.  bra polyloop
  3951.  
  3952. jumpoutofloop:
  3953.  rts
  3954.  
  3955. GOURSEL: dc.w 0
  3956. ThisRoomToDraw: dc.l 0,0
  3957. SplitHeight: dc.l 0
  3958.  
  3959.  include "ab3:source/OrderZones"
  3960.  
  3961. ReadMouse:
  3962.  move.l #$dff000,a6
  3963.  clr.l d0
  3964.  clr.l d1
  3965.  move.w $a(a6),d0
  3966.  lsr.w #8,d0
  3967.  ext.l d0
  3968.  move.w d0,d3
  3969.  move.w oldmy,d2
  3970.  sub.w d2,d0
  3971.  
  3972.  cmp.w #127,d0
  3973.  blt nonegy
  3974.  move.w #255,d1
  3975.  sub.w d0,d1
  3976.  move.w d1,d0
  3977.  neg.w d0
  3978. nonegy:
  3979.  
  3980.  cmp.w #-127,d0
  3981.  bge nonegy2
  3982.  move.w #255,d1
  3983.  add.w d0,d1
  3984.  move.w d1,d0
  3985. nonegy2:
  3986.  
  3987.  add.b d0,d2
  3988.  add.w d0,oldy2
  3989.  move.w d2,oldmy
  3990.  move.w d2,d0
  3991.  
  3992.  move.w oldy2,d0
  3993.  move.w d0,ymouse
  3994.  
  3995.  clr.l d0
  3996.  clr.l d1
  3997.  move.w $a(a6),d0
  3998.  ext.w d0
  3999.  ext.l d0
  4000.  move.w d0,d3
  4001.  move.w oldmx,d2
  4002.  sub.w d2,d0
  4003.  
  4004.  cmp.w #127,d0
  4005.  blt nonegx
  4006.  move.w #255,d1
  4007.  sub.w d0,d1
  4008.  move.w d1,d0
  4009.  neg.w d0
  4010. nonegx:
  4011.  
  4012.  cmp.w #-127,d0
  4013.  bge nonegx2
  4014.  move.w #255,d1
  4015.  add.w d0,d1
  4016.  move.w d1,d0
  4017. nonegx2:
  4018.  
  4019.  add.b d0,d2
  4020.  move.w d0,d1
  4021.  move.w d2,oldmx
  4022.  
  4023.  move.w #$0,$dff034
  4024.  btst #2,$dff016
  4025.  beq.s noturn
  4026.  
  4027.  add.w d0,oldx2
  4028.  move.w oldx2,d0
  4029.  and.w #2047,d0
  4030.  move.w d0,oldx2
  4031.  
  4032.  asl.w #2,d0
  4033.  sub.w prevx,d0
  4034.  add.w d0,prevx
  4035.  add.w d0,angpos
  4036.  move.w #0,lrs
  4037.  rts
  4038.  
  4039. noturn:
  4040.  
  4041. ; got to move lr instead. 
  4042.  
  4043. ; d1 = speed moved l/r
  4044.  
  4045.  move.w d1,lrs
  4046.  
  4047.  rts
  4048.  
  4049. lrs: dc.w 0
  4050. prevx: dc.w 0
  4051.  
  4052. angpos: dc.w 0
  4053. mang: dc.w 0
  4054. oldymouse: dc.w 0
  4055. xmouse: dc.w 0
  4056. ymouse: dc.w 0
  4057. oldx2: dc.w 0
  4058. oldmx: dc.w 0
  4059. oldmy: dc.w 0
  4060. oldy2: dc.w 0
  4061.  
  4062. RotateLevelPts:
  4063.  
  4064.  move.w sinval,d6
  4065.  swap d6
  4066.  move.w cosval,d6
  4067.  
  4068.  move.l PointsToRotatePtr,a0
  4069.  move.l Points,a3
  4070.  move.l #Rotated,a1
  4071.  move.l #OnScreen,a2
  4072.  move.w xoff,d4
  4073.  move.w zoff,d5
  4074.  
  4075. ; move.w #$c40,$dff106
  4076. ; move.w #$f00,$dff180
  4077.  
  4078. pointrotlop:
  4079.  move.w (a0)+,d7
  4080.  blt.s outofpointrot
  4081.  
  4082.  move.w (a3,d7*4),d0
  4083.  sub.w d4,d0
  4084.  move.w d0,d2
  4085.  move.w 2(a3,d7*4),d1
  4086.  sub.w d5,d1
  4087.  muls d6,d2
  4088.  swap d6
  4089.  move.w d1,d3
  4090.  muls d6,d3
  4091.  sub.l d3,d2
  4092.  add.l d2,d2
  4093.  swap d2
  4094.  ext.l d2
  4095.  asl.l #7,d2
  4096.  add.l xwobble,d2
  4097.  move.l d2,(a1,d7*8)
  4098.  
  4099.  muls d6,d0
  4100.  swap d6
  4101.  muls d6,d1
  4102.  add.l d0,d1
  4103.  asl.l #2,d1
  4104.  swap d1
  4105.  move.l d1,4(a1,d7*8)
  4106.  
  4107.  tst.w d1
  4108.  bgt.s ptnotbehind
  4109.  tst.w d2
  4110.  bgt.s onrightsomewhere
  4111.  move.w #0,d2
  4112.  bra putin
  4113. onrightsomewhere:
  4114.  move.w #96,d2
  4115.  bra putin
  4116. ptnotbehind:
  4117.  
  4118.  divs d1,d2
  4119.  add.w #47,d2
  4120. putin:
  4121.  move.w d2,(a2,d7*2)
  4122.  
  4123.  bra pointrotlop
  4124. outofpointrot:
  4125.  
  4126. ; move.w #$c40,$dff106
  4127. ; move.w #$ff0,$dff180
  4128.  
  4129.  rts
  4130.  
  4131. PLR1_ObjDists
  4132.  ds.w 250
  4133. PLR2_ObjDists
  4134.  ds.w 250
  4135.  
  4136. CalcPLR1InLine:
  4137.  
  4138.  move.w PLR1_sinval,d5
  4139.  move.w PLR1_cosval,d6
  4140.  move.l ObjectData,a4
  4141.  move.l ObjectPoints,a0
  4142.  move.w NumObjectPoints,d7
  4143.  move.l #PLR1_ObsInLine,a2
  4144.  move.l #PLR1_ObjDists,a3
  4145.  
  4146. .objpointrotlop:
  4147.  
  4148.  move.w (a0),d0
  4149.  sub.w PLR1_xoff,d0
  4150.  move.w 4(a0),d1
  4151.  addq #8,a0
  4152.  
  4153.  tst.w 12(a4)
  4154.  blt .noworkout
  4155.  
  4156.  moveq #0,d2
  4157.  move.b 16(a4),d2
  4158.  move.l #ColBoxTable,a6
  4159.  lea (a6,d2.w*8),a6
  4160.  
  4161.  sub.w PLR1_zoff,d1
  4162.  move.w d0,d2
  4163.  muls d6,d2
  4164.  move.w d1,d3
  4165.  muls d5,d3
  4166.  sub.l d3,d2
  4167.  add.l d2,d2
  4168.  
  4169.  bgt.s .okh
  4170.  neg.l d2
  4171. .okh:
  4172.  swap d2
  4173.  
  4174.  muls d5,d0
  4175.  muls d6,d1
  4176.  add.l d0,d1
  4177.  asl.l #2,d1
  4178.  swap d1
  4179.  moveq #0,d3
  4180.  
  4181.  tst.w d1
  4182.  ble.s .notinline
  4183.  asr.w #1,d2
  4184.  cmp.w (a6),d2
  4185.  bgt.s .notinline
  4186.  
  4187.  st d3
  4188. .notinline
  4189.  move.b d3,(a2)+
  4190.  
  4191.  move.w d1,(a3)+
  4192.  
  4193.  add.w #64,a4
  4194.  dbra d7,.objpointrotlop
  4195.  
  4196.  rts
  4197.  
  4198. .noworkout:
  4199.  move.b #0,(a2)+
  4200.  move.w #0,(a3)+
  4201.  add.w #64,a4
  4202.  dbra d7,.objpointrotlop
  4203.  rts
  4204.  
  4205.  
  4206. CalcPLR2InLine:
  4207.  
  4208.  move.w PLR2_sinval,d5
  4209.  move.w PLR2_cosval,d6
  4210.  move.l ObjectData,a4
  4211.  move.l ObjectPoints,a0
  4212.  move.w NumObjectPoints,d7
  4213.  move.l #PLR2_ObsInLine,a2
  4214.  move.l #PLR2_ObjDists,a3
  4215.  
  4216. .objpointrotlop:
  4217.  
  4218.  move.w (a0),d0
  4219.  sub.w PLR2_xoff,d0
  4220.  move.w 4(a0),d1
  4221.  addq #8,a0
  4222.  
  4223.  tst.w 12(a4)
  4224.  blt .noworkout
  4225.  
  4226.  moveq #0,d2
  4227.  move.b 16(a4),d2
  4228.  move.l #ColBoxTable,a6
  4229.  lea (a6,d2.w*8),a6
  4230.  
  4231.  sub.w PLR2_zoff,d1
  4232.  move.w d0,d2
  4233.  muls d6,d2
  4234.  move.w d1,d3
  4235.  muls d5,d3
  4236.  sub.l d3,d2
  4237.  add.l d2,d2
  4238.  
  4239.  bgt.s .okh
  4240.  neg.l d2
  4241. .okh:
  4242.  swap d2
  4243.  
  4244.  muls d5,d0
  4245.  muls d6,d1
  4246.  add.l d0,d1
  4247.  asl.l #2,d1
  4248.  swap d1
  4249.  moveq #0,d3
  4250.  
  4251.  tst.w d1
  4252.  ble.s .notinline
  4253.  asr.w #1,d2
  4254.  cmp.w (a6),d2
  4255.  bgt.s .notinline
  4256.  
  4257.  st d3
  4258. .notinline
  4259.  move.b d3,(a2)+
  4260.  
  4261.  move.w d1,(a3)+
  4262.  
  4263.  add.w #64,a4
  4264.  dbra d7,.objpointrotlop
  4265.  
  4266.  rts
  4267.  
  4268. .noworkout:
  4269.  move.w #0,(a3)+
  4270.  move.b #0,(a2)+
  4271.  add.w #64,a4
  4272.  dbra d7,.objpointrotlop
  4273.  rts
  4274.  
  4275.  
  4276. RotateObjectPts:
  4277.  
  4278.  move.w sinval,d5
  4279.  move.w cosval,d6
  4280.  
  4281.  move.l ObjectData,a4
  4282.  move.l ObjectPoints,a0
  4283.  move.w NumObjectPoints,d7
  4284.  move.l #ObjRotated,a1
  4285.  
  4286. .objpointrotlop:
  4287.  
  4288.  move.w (a0),d0
  4289.  sub.w xoff,d0
  4290.  move.w 4(a0),d1
  4291.  addq #8,a0
  4292.  
  4293.  tst.w 12(a4)
  4294.  blt .noworkout
  4295.  
  4296.  sub.w zoff,d1
  4297.  move.w d0,d2
  4298.  muls d6,d2
  4299.  move.w d1,d3
  4300.  muls d5,d3
  4301.  sub.l d3,d2
  4302.  
  4303.  
  4304.  add.l d2,d2
  4305.  swap d2
  4306.  move.w d2,(a1)+
  4307.  
  4308.  muls d5,d0
  4309.  muls d6,d1
  4310.  add.l d0,d1
  4311.  asl.l #2,d1
  4312.  swap d1
  4313.  moveq #0,d3
  4314.  
  4315.  move.w d1,(a1)+
  4316.  ext.l d2
  4317.  asl.l #7,d2
  4318.  add.l xwobble,d2
  4319.  move.l d2,(a1)+
  4320.  sub.l xwobble,d2
  4321.  
  4322.  add.w #64,a4
  4323.  dbra d7,.objpointrotlop
  4324.  
  4325.  rts
  4326.  
  4327. .noworkout:
  4328.   move.l #0,(a1)+
  4329.   move.l #0,(a1)+
  4330.   add.w #64,a4
  4331.   dbra d7,.objpointrotlop
  4332.   rts
  4333.  
  4334. LightDraw:
  4335.  
  4336.  move.w (a0)+,d0
  4337.  move.w (a0)+,d1
  4338.  move.l #Rotated,a1
  4339.  move.w 6(a1,d0.w*8),d2
  4340.  ble.s oneendbehind
  4341.  move.w 6(a1,d1.w*8),d3
  4342.  bgt.s bothendsinfront
  4343.  
  4344. oneendbehind:
  4345.  rts
  4346. bothendsinfront:
  4347.  
  4348.  move.l #OnScreen,a2
  4349.  move.w (a2,d0.w*2),d0
  4350.  bge.s okleftend
  4351.  moveq #0,d0
  4352. okleftend:
  4353.  move.w (a2,d1.w*2),d1
  4354.  bgt.s somevis
  4355.  rts
  4356. somevis:
  4357.  cmp.w #95,d0
  4358.  ble.s somevis2
  4359.  rts
  4360. somevis2:
  4361.  cmp.w #95,d1
  4362.  ble.s okrightend
  4363.  move.w #95,d1
  4364. okrightend:
  4365.  
  4366.  sub.w d0,d1
  4367.  blt.s wrongbloodywayround
  4368.  move.l #brightentab,a4
  4369.  move.l #objintocop,a1
  4370.  lea (a1,d0.w*2),a1
  4371.  
  4372.  move.l frompt,a3
  4373.  move.w #104*4,d6
  4374.  move.w #79,d2
  4375. lacross:
  4376.  move.w d2,d3
  4377.  move.l a3,a2
  4378.  adda.w (a1)+,a2
  4379. ldown:
  4380.  add.w d6,a2
  4381.  move.w (a2),d7
  4382.  move.w (a4,d7.w*2),(a2)
  4383.  dbra d3,ldown
  4384.  dbra d1,lacross
  4385.  
  4386. wrongbloodywayround:
  4387.  
  4388.  rts
  4389.  
  4390. FaceToPlace: dc.w 0
  4391.  
  4392. Cheese:
  4393.  dc.w 4,15
  4394.  
  4395. FacesList:
  4396.  dc.w 0,4*4
  4397.  dc.w 1,2*4
  4398.  dc.w 0,2*4
  4399.  dc.w 2,2*4
  4400.  dc.w 0,2*4
  4401.  dc.w 1,3*4
  4402.  dc.w 0,2*4
  4403.  dc.w 2,3*4
  4404.  dc.w 0,5*4
  4405.  dc.w 1,2*4
  4406.  dc.w 0,2*4
  4407.  dc.w 2,2*4
  4408.  dc.w 0,2*4
  4409.  dc.w 1,2*4
  4410.  dc.w 0,2*4
  4411.  dc.w 2,3*4
  4412.  dc.w 0,1*4
  4413.  dc.w 1,3*4
  4414.  dc.w 0,1*4
  4415.  dc.w 2,3*4
  4416.  dc.w 0,1*4
  4417.  
  4418. EndOfFacesList:
  4419.  
  4420. FacesPtr:
  4421.  dc.l FacesList
  4422. FacesCounter:
  4423.  dc.w 0
  4424. Expression:
  4425.  dc.w 0
  4426.  
  4427. PlaceFace:
  4428.  
  4429.  move.w FacesCounter,d0
  4430.  subq #1,d0
  4431.  bgt.s NoNewFace
  4432.  
  4433.  move.l FacesPtr,a0
  4434.  
  4435.  move.w 2(a0),d0
  4436.  move.w (a0),Expression
  4437.  addq #4,a0
  4438.  cmp.l #EndOfFacesList,a0
  4439.  blt.s NotFirstFace
  4440.  
  4441.  move.l #FacesList,a0
  4442.  
  4443. NotFirstFace
  4444.  move.l a0,FacesPtr
  4445.  
  4446. NoNewFace:
  4447.  
  4448.  move.w d0,FacesCounter
  4449.  
  4450.  Move.w FaceToPlace,d0
  4451.  muls #5,d0
  4452.  add.w Expression,d0
  4453.  move.l #FacePlace+10,a0
  4454.  move.l #Faces,a1
  4455.  muls #(4*32*5),d0
  4456.  adda.w d0,a1
  4457.  move.w #4,d0
  4458.  move.w #24,d1
  4459.  
  4460.  move.w #4,d3
  4461. bitplaneloop:
  4462.  move.w #31,d2
  4463. PlaceFaceToPlaceInFacePlaceLoop:
  4464.  move.l (a1),(a0)
  4465.  adda.w d0,a1
  4466.  adda.w d1,a0
  4467.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4468.  dbra d3,bitplaneloop
  4469.  
  4470.  rts
  4471.  
  4472. Energy:
  4473.  dc.w 191
  4474. OldEnergy:
  4475.  dc.w 191
  4476. Ammo: dc.w 63
  4477. OldAmmo: dc.w 63
  4478.  
  4479. FullEnergy:
  4480.  move.w #127,Energy
  4481.  move.w #127,OldEnergy
  4482.  move.l #health,a0
  4483.  move.l #borders,a1
  4484.  add.l #25*8*2+6,a1
  4485.  lea 2592(a1),a2
  4486.  move.w #127,d0
  4487. PutInFull:
  4488.  move.b (a0)+,(a1)
  4489.  move.b (a0)+,8(a1)
  4490.  add.w #16,a1
  4491.  move.b (a0)+,(a2)
  4492.  move.b (a0)+,8(a2)
  4493.  add.w #16,a2
  4494.  dbra d0,PutInFull
  4495.  
  4496.  rts
  4497.  
  4498. EnergyBar:
  4499.  
  4500.  move.w Energy,d0
  4501.  cmp.w OldEnergy,d0
  4502.  bne.s gottochange
  4503.  
  4504. NoChange
  4505.  rts
  4506.  
  4507. gottochange:
  4508.   
  4509.  blt LessEnergy
  4510.  cmp.w #127,Energy
  4511.  blt.s NotMax
  4512.  move.w #127,Energy
  4513. NotMax:
  4514.  
  4515.  move.w Energy,d0
  4516.  move.w OldEnergy,d2
  4517.  sub.w d0,d2
  4518.  beq.s NoChange    
  4519.  neg.w d2
  4520.  
  4521.  move.w #127,d3
  4522.  sub.w d0,d3
  4523.  
  4524.  move.l #health,a0
  4525.  lea (a0,d3.w*4),a0
  4526.  move.l #borders+25*16+6,a1
  4527.  lsl.w #4,d3
  4528.  add.w d3,a1
  4529.  lea 2592(a1),a2
  4530.  
  4531. EnergyRise:
  4532.  move.b (a0)+,(a1)
  4533.  move.b (a0)+,8(a1)
  4534.  add.w #16,a1
  4535.  move.b (a0)+,(a2)
  4536.  move.b (a0)+,8(a2)
  4537.  add.w #16,a2
  4538.  subq #1,d2
  4539.  bgt.s EnergyRise
  4540.  
  4541.  move.w Energy,OldEnergy
  4542.  
  4543.  rts 
  4544.  
  4545. LessEnergy: 
  4546.  move.w OldEnergy,d2
  4547.  sub.w d0,d2
  4548.  
  4549.  move.w #127,d3
  4550.  sub.w OldEnergy,d3
  4551.  
  4552.  move.l #borders+25*16+6,a1
  4553.  asl.w #4,d3
  4554.  add.w d3,a1
  4555.  lea 2592(a1),a2
  4556.  
  4557. EnergyDrain:
  4558.  move.b #0,(a1)
  4559.  move.b #0,8(a1)
  4560.  move.b #0,(a2)
  4561.  move.b #0,8(a2)
  4562.  add.w #16,a1
  4563.  add.w #16,a2
  4564.  subq #1,d2
  4565.  bgt.s EnergyDrain
  4566.  
  4567.  move.w Energy,OldEnergy
  4568.  
  4569.  rts 
  4570.  
  4571. AmmoBar:
  4572.  
  4573.  move.w Ammo,d0
  4574.  cmp.w OldAmmo,d0
  4575.  bne.s .gottochange
  4576.  
  4577. .NoChange
  4578.  rts
  4579.  
  4580. .gottochange:
  4581.   
  4582.  blt LessAmmo
  4583.  cmp.w #63,Ammo
  4584.  blt.s .NotMax
  4585.  move.w #63,Ammo
  4586. .NotMax:
  4587.  
  4588.  move.w Ammo,d0
  4589.  move.w OldAmmo,d2
  4590.  sub.w d0,d2
  4591.  beq.s .NoChange
  4592.  neg.w d2
  4593.  
  4594.  move.w #63,d3
  4595.  sub.w d0,d3
  4596.  
  4597.  move.l #Ammunition,a0
  4598.  lea (a0,d3.w*8),a0
  4599.  move.l #borders+5184+25*16+1,a1
  4600.  lsl.w #5,d3
  4601.  add.w d3,a1
  4602.  lea 2592(a1),a2
  4603.  
  4604. AmmoRise:
  4605.  move.b (a0)+,(a1)
  4606.  move.b (a0)+,8(a1)
  4607.  add.w #16,a1
  4608.  move.b (a0)+,(a2)
  4609.  move.b (a0)+,8(a2)
  4610.  add.w #16,a2
  4611.  move.b (a0)+,(a1)
  4612.  move.b (a0)+,8(a1)
  4613.  add.w #16,a1
  4614.  move.b (a0)+,(a2)
  4615.  move.b (a0)+,8(a2)
  4616.  add.w #16,a2
  4617.  subq #1,d2
  4618.  bgt.s AmmoRise
  4619.  
  4620.  move.w Ammo,OldAmmo
  4621.  
  4622.  rts 
  4623.  
  4624.  
  4625. LessAmmo: 
  4626.  move.w OldAmmo,d2
  4627.  sub.w d0,d2
  4628.  
  4629.  move.w #63,d3
  4630.  sub.w OldAmmo,d3
  4631.  
  4632.  move.l #borders++5184+25*16+1,a1
  4633.  asl.w #5,d3
  4634.  add.w d3,a1
  4635.  lea 2592(a1),a2
  4636.  
  4637. AmmoDrain:
  4638.  move.b #0,(a1)
  4639.  move.b #0,8(a1)
  4640.  move.b #0,(a2)
  4641.  move.b #0,8(a2)
  4642.  add.w #16,a1
  4643.  add.w #16,a2
  4644.  move.b #0,(a1)
  4645.  move.b #0,8(a1)
  4646.  move.b #0,(a2)
  4647.  move.b #0,8(a2)
  4648.  add.w #16,a1
  4649.  add.w #16,a2
  4650.  subq #1,d2
  4651.  bgt.s AmmoDrain
  4652.  
  4653.  move.w Ammo,OldAmmo
  4654.  
  4655.  rts 
  4656.  
  4657. nulop:
  4658.  move.w #$0010,$dff000+intreq
  4659.  rte
  4660.  
  4661. doanything: dc.w 0
  4662.  
  4663. end:
  4664.  
  4665.  move.w PLR1_energy,Energy
  4666.  cmp.b #'s',mors
  4667.  bne.s .notsl
  4668.  move.w PLR2_energy,Energy
  4669. .notsl:
  4670.  
  4671.  bsr EnergyBar
  4672.  
  4673.  move.l drawpt,d0
  4674.  move.l olddrawpt,drawpt
  4675.  move.l d0,olddrawpt
  4676.  move.l d0,$dff084
  4677.  
  4678.  
  4679.  clr.b doanything
  4680.  cmp.b #'b',Prefsfile+3
  4681.  bne.s .noback
  4682.  jsr mt_end
  4683. .noback
  4684.  tst.w Energy
  4685.  bgt.s wevewon
  4686.  
  4687.  move.l #gameover,mt_data
  4688.  st UseAllChannels
  4689.  clr.b reachedend
  4690.  jsr mt_init
  4691. playgameover:
  4692.  move.l #$dff000,a6
  4693. waitfortop2:
  4694.  btst.b #0,intreqrl(a6)
  4695.  beq waitfortop2
  4696.  move.w #$1,intreq(a6)
  4697.  
  4698.  jsr mt_music
  4699.  
  4700.  tst.b reachedend
  4701.  beq.s playgameover
  4702.  
  4703.  bra wevelost
  4704.  
  4705.  
  4706. wevewon:
  4707.  
  4708.  cmp.b #'n',mors
  4709.  bne.s .nonextlev
  4710.  add.w #1,MAXLEVEL
  4711.  st FINISHEDLEVEL
  4712. .nonextlev:
  4713.  
  4714.  move.l #welldone,mt_data
  4715.  st UseAllChannels
  4716.  clr.b reachedend
  4717.  jsr mt_init
  4718. playwelldone:
  4719.  move.l #$dff000,a6
  4720. waitfortop3:
  4721.  btst.b #0,intreqrl(a6)
  4722.  beq waitfortop3
  4723.  move.w #$1,intreq(a6)
  4724.  
  4725.  jsr mt_music
  4726.  
  4727.  tst.b reachedend
  4728.  beq.s playwelldone
  4729.  
  4730.  cmp.w #16,MAXLEVEL
  4731.  bne .noendgame
  4732.  jsr ENDGAMESCROLL
  4733. .noendgame:
  4734.  
  4735. wevelost:
  4736.  jmp closeeverything 
  4737.  
  4738. endnomusic
  4739.  clr.b doanything
  4740.  cmp.b #'b',Prefsfile+3
  4741.  bne.s .noback
  4742.  jsr mt_end
  4743. .noback
  4744. *******************************
  4745. ; cmp.b #'n',mors
  4746. ; bne.s .nonextlev
  4747. ; cmp.w #15,MAXLEVEL
  4748. ; bge.s .nonextlev
  4749. ; add.w #1,MAXLEVEL
  4750. ; st FINISHEDLEVEL
  4751. ;.nonextlev:
  4752. ******************************
  4753.  
  4754.  jmp closeeverything
  4755.  
  4756. do32:
  4757.  move.w #31,d7
  4758.  move.w #$180,d1
  4759. across:
  4760.  move.w d1,(a1)+
  4761.  move.w d1,(a3)+
  4762.  move.w #0,(a1)+ 
  4763.  move.w #0,(a3)+
  4764.  add.w #2,d1
  4765.  dbra d7,across
  4766.  rts
  4767.  
  4768. ENDGAMESCROLL:
  4769.  include "endscroll.s"
  4770.  
  4771. ***********************************
  4772.  include "ab3:source/CD32JOY"
  4773.  
  4774.  
  4775.  
  4776. *************************************
  4777. * Set left and right clip values
  4778. *************************************
  4779.  
  4780.  
  4781.  
  4782. NEWsetlclip:
  4783.  move.l #OnScreen,a1
  4784.  move.l #Rotated,a2
  4785.  move.l CONNECT_TABLE,a3
  4786.  
  4787.  move.w (a0),d0
  4788.  bge.s .notignoreleft
  4789.  
  4790. ; move.l #0,(a6)
  4791.  
  4792.  bra .leftnotoktoclip
  4793. .notignoreleft:
  4794.  
  4795.  move.w 6(a2,d0*8),d3    ; left z val
  4796.  bgt.s .leftclipinfront
  4797.  addq #2,a0
  4798.  rts
  4799.  
  4800.  tst.w 6(a2,d0*8)
  4801.  bgt.s .leftnotoktoclip
  4802. .ignoreboth:
  4803. ; move.l #0,(a6)
  4804. ; move.l #96*65536,4(a6)
  4805.  move.w #0,leftclip
  4806.  move.w #96,rightclip
  4807.  addq #8,a6
  4808.  addq #2,a0
  4809.  rts
  4810.  
  4811. .leftclipinfront:
  4812.  move.w (a1,d0*2),d1    ; left x on screen
  4813.  move.w (a0),d2
  4814.  move.w 2(a3,d2.w*4),d2
  4815.  move.w (a1,d2.w*2),d2
  4816.  cmp.w d1,d2
  4817.  bgt.s .leftnotoktoclip
  4818.  
  4819. ; move.w d1,(a6)
  4820. ; move.w d3,2(a6)
  4821.  cmp.w leftclip,d1
  4822.  ble.s .leftnotoktoclip
  4823.  move.w d1,leftclip
  4824. .leftnotoktoclip:
  4825.  
  4826.  addq #2,a0
  4827.  
  4828.  rts
  4829.  
  4830. NEWsetrclip
  4831.  move.l #OnScreen,a1
  4832.  move.l #Rotated,a2
  4833.  move.l CONNECT_TABLE,a3
  4834.  move.w (a0),d0
  4835.  bge.s .notignoreright
  4836. ; move.w #96,4(a6)
  4837. ; move.w #0,6(a6)
  4838.  move.w #0,d4
  4839.  bra .rightnotoktoclip
  4840. .notignoreright:
  4841.  move.w 6(a2,d0*8),d4    ; right z val
  4842.  bgt.s .rightclipinfront
  4843. ; move.w #96,4(a6)
  4844. ; move.w #0,6(a6)
  4845.  bra.s .rightnotoktoclip
  4846.  
  4847. .rightclipinfront:
  4848.  move.w (a1,d0*2),d1    ; right x on screen
  4849.  move.w (a0),d2
  4850.  move.w (a3,d2.w*4),d2
  4851.  move.w (a1,d2.w*2),d2
  4852.  cmp.w d1,d2
  4853.  blt.s .rightnotoktoclip
  4854. ; move.w d1,4(a6)
  4855. ; move.w d4,6(a6)
  4856.  
  4857.  cmp.w rightclip,d1
  4858.  bge.s .rightnotoktoclip
  4859.  addq #1,d1
  4860.  move.w d1,rightclip
  4861. .rightnotoktoclip:
  4862.  addq #8,a6
  4863.  addq #2,a0
  4864.  rts
  4865.  
  4866. FIRSTsetlrclip:
  4867.  move.l #OnScreen,a1
  4868.  move.l #Rotated,a2
  4869.  
  4870.  move.w (a0)+,d0
  4871.  bge.s .notignoreleft
  4872.  bra .leftnotoktoclip
  4873. .notignoreleft:
  4874.  
  4875.  move.w 6(a2,d0*8),d3    ; left z val
  4876.  bgt.s .leftclipinfront
  4877.  
  4878.  move.w (a0),d0
  4879.  blt.s .ignoreboth
  4880.  tst.w 6(a2,d0*8)
  4881.  bgt.s .leftnotoktoclip
  4882. .ignoreboth
  4883.  move.w #96,rightclip
  4884.  move.w #0,leftclip
  4885.  addq #2,a0
  4886.  rts
  4887.  
  4888. .leftclipinfront:
  4889.  move.w (a1,d0*2),d1    ; left x on screen
  4890.  cmp.w leftclip,d1
  4891.  ble.s .leftnotoktoclip
  4892.  move.w d1,leftclip
  4893. .leftnotoktoclip:
  4894.  
  4895.  move.w (a0)+,d0
  4896.  bge.s .notignoreright
  4897.  move.w #0,d4
  4898.  bra .rightnotoktoclip
  4899. .notignoreright:
  4900.  move.w 6(a2,d0*8),d4    ; right z val
  4901.  ble.s .rightnotoktoclip
  4902.  
  4903. .rightclipinfront:
  4904.  move.w (a1,d0*2),d1    ; right x on screen
  4905.  addq #1,d1
  4906.  cmp.w rightclip,d1
  4907.  bge.s .rightnotoktoclip
  4908.  move.w d1,rightclip
  4909. .rightnotoktoclip:
  4910.  
  4911. ; move.w leftclip,d0
  4912. ; move.w rightclip,d1
  4913. ; cmp.w d0,d1
  4914. ; bge.s .noswap
  4915. ; move.w #96,rightclip
  4916. ; move.w #0,leftclip
  4917. ;.noswap:
  4918.  
  4919.  rts
  4920.  
  4921.  
  4922. leftclip2: dc.w 0
  4923. rightclip2: dc.w 0
  4924. ZoneBright: dc.w 0
  4925.  
  4926. npolys: dc.w 0
  4927.  
  4928. PLR1_fire: dc.b 0
  4929. PLR2_fire: dc.b 0
  4930.  
  4931. *****************************************************
  4932.  
  4933.  
  4934. pastdata:
  4935. ***********************************
  4936. * This routine animates brightnesses.
  4937.  
  4938.  
  4939. liftpt: dc.l liftanimtab
  4940.  
  4941. brightpt:
  4942.  dc.l brightanimtab
  4943.  
  4944.  
  4945. liftanim:
  4946.  rts
  4947.  
  4948. ******************************
  4949.  include "ab3:source/ObjectMove"
  4950.  include "ab3:source/Anims"
  4951. ******************************
  4952. startpass:
  4953. ; include "ab3:source/password_reloc.s"
  4954. endpass:
  4955.  
  4956. rotanimpt: dc.w 0
  4957. xradd: dc.w 5
  4958. yradd: dc.w 8
  4959. xrpos: dc.w 320
  4960. yrpos: dc.w 320
  4961.  
  4962. rotanim:
  4963.  rts
  4964.  
  4965. option:
  4966.  dc.l 0,0
  4967.  
  4968. ********** WALL STUFF *******************************
  4969.  
  4970.  include "AB3:source/wallroutine3.chipmem"
  4971.  
  4972. *****************************************************
  4973.  
  4974. ******************************************
  4975. * floor polygon
  4976.  
  4977. numsidestd: dc.w 0
  4978. bottomline: dc.w 0
  4979.  
  4980. checkforwater:
  4981.  tst.b usewater
  4982.  beq.s .notwater
  4983.  
  4984.  move.l Roompt,a1
  4985.  move.w (a1),d7
  4986.  cmp.w currzone,d7
  4987.  bne.s .notwater
  4988.  
  4989.  move.b #$f,fillscrnwater
  4990.  
  4991. .notwater:
  4992.  move.w (a0)+,d6    ; sides-1
  4993.  add.w d6,d6
  4994.  add.w d6,a0
  4995.  add.w #4+6,a0
  4996.  rts
  4997.  
  4998.  rts
  4999.  
  5000. NewCornerBuff:
  5001.  ds.l 100
  5002. CLRNOFLOOR: dc.w 0
  5003.  
  5004. itsafloordraw:
  5005.  
  5006. * If D0 =1 then its a floor otherwise (=2) it's
  5007. * a roof.
  5008.  
  5009.  move.w #0,above
  5010.  move.w (a0)+,d6    ; ypos of poly
  5011.  
  5012.  move.w d6,d7
  5013.  ext.l d7
  5014.  asl.l #6,d7
  5015.  cmp.l TOPOFROOM,d7
  5016.  blt checkforwater
  5017.  cmp.l BOTOFROOM,d7
  5018.  bgt.s dontdrawreturn
  5019.  
  5020.  move.w leftclip(pc),d7
  5021.  cmp.w rightclip(pc),d7
  5022.  bge.s dontdrawreturn
  5023.  
  5024.  move.w botclip,d7
  5025.  sub.w #40,d7
  5026.  ble.s dontdrawreturn
  5027.  sub.w flooryoff,d6
  5028.  bgt.s below
  5029.  blt.s aboveplayer
  5030.  
  5031.  tst.b usewater
  5032.  beq.s .notwater
  5033.  
  5034.  move.l Roompt,a1
  5035.  move.w (a1),d7
  5036.  cmp.w currzone,d7
  5037.  
  5038.  bne.s .notwater
  5039.  
  5040.  st fillscrnwater
  5041.  
  5042. .notwater:
  5043.  
  5044.  
  5045. dontdrawreturn:
  5046.  move.w (a0)+,d6    ; sides-1
  5047.  add.w d6,d6
  5048.  add.w d6,a0
  5049.  add.w #4+6,a0
  5050.  rts
  5051. aboveplayer:
  5052.  
  5053.  tst.b usewater
  5054.  beq.s .notwater
  5055.  
  5056.  move.l Roompt,a1
  5057.  move.w (a1),d7
  5058.  cmp.w currzone,d7
  5059.  bne.s .notwater
  5060.  
  5061.  move.b #$f,fillscrnwater
  5062.  
  5063. .notwater:
  5064.  
  5065.  btst #1,d0
  5066.  beq.s dontdrawreturn
  5067.  move.w #40,d7
  5068.  sub.w topclip,d7 
  5069.  ble.s dontdrawreturn
  5070.  move.w #1,d0
  5071.  move.w d0,above
  5072.  neg.w d6
  5073. below:
  5074.  btst #0,d0
  5075.  beq.s dontdrawreturn
  5076.  move.w d6,distaddr
  5077.  muls #64,d6
  5078.  move.l d6,ypos
  5079.  divs d7,d6        ; zpos of bottom
  5080.             ; visible line
  5081.  move.w d6,minz
  5082.  move.w d7,bottomline
  5083.  
  5084. ; Go round each point finding out
  5085. ; if it should be visible or not.
  5086.  
  5087.  move.l a0,-(a7)
  5088.  
  5089.  move.w (a0)+,d7    ; number of sides
  5090.  move.l #Rotated,a1
  5091.  move.l #OnScreen,a2
  5092.  move.l #NewCornerBuff,a3
  5093.  moveq #0,d4
  5094.  moveq #0,d5
  5095.  moveq #0,d6
  5096.  clr.b anyclipping
  5097.  
  5098. cornerprocessloop:
  5099.  
  5100.  move.w (a0)+,d0
  5101.  move.w 6(a1,d0.w*8),d1
  5102.  ble  .canttell
  5103.  
  5104.  move.w (a2,d0.w*2),d3
  5105.  cmp.w leftclip,d3
  5106.  bgt.s .nol
  5107.  st d4
  5108.  st anyclipping
  5109.  bra.s .nos
  5110. .nol:
  5111.  cmp.w rightclip,d3
  5112.  blt.s .nor
  5113.  st d6
  5114.  st anyclipping
  5115.  bra.s .nos
  5116. .nor:
  5117.  st d5
  5118. .nos:
  5119.  bra .cantell
  5120.  
  5121. .canttell:
  5122.  st d5
  5123.  st anyclipping
  5124.  
  5125. .cantell:
  5126.  
  5127.  
  5128.  dbra d7,cornerprocessloop
  5129.  
  5130.  move.l (a7)+,a0
  5131.  tst.b d5
  5132.  bne.s somefloortodraw
  5133.  eor.b d4,d6
  5134.  bne dontdrawreturn
  5135.  
  5136. somefloortodraw:
  5137.  
  5138.  tst.b gourfloor
  5139.  bne goursides
  5140.  
  5141.  move.w #80,top
  5142.  move.w #-1,bottom
  5143.  move.w #0,drawit
  5144.  move.l #Rotated,a1
  5145.  move.l #OnScreen,a2
  5146.  move.w (a0)+,d7    ; no of sides
  5147. sideloop:
  5148.  move.w minz,d6
  5149.  move.w (a0)+,d1
  5150.  move.w (a0),d3
  5151.  move.w 6(a1,d1*8),d4    ;first z
  5152.  cmp.w d6,d4
  5153.  bgt firstinfront
  5154.  move.w 6(a1,d3*8),d5    ; sec z
  5155.  cmp.w d6,d5
  5156.  ble bothbehind
  5157. ** line must be on left and partially behind.
  5158.  sub.w d5,d4
  5159.  move.l (a1,d1*8),d0
  5160.  sub.l (a1,d3*8),d0
  5161.  asr.l #7,d0
  5162.  sub.w d5,d6
  5163.  muls d6,d0    ; new x coord
  5164.  divs d4,d0
  5165.  ext.l d0
  5166.  asl.l #7,d0
  5167.  
  5168.  add.l (a1,d3*8),d0
  5169.  move.w minz,d4
  5170.  move.w (a2,d3*2),d2
  5171.  divs d4,d0
  5172.  add.w #47,d0
  5173.  move.l ypos,d3
  5174.  divs d5,d3
  5175.  move.w bottomline,d1 
  5176.  bra lineclipped
  5177.  
  5178. firstinfront:
  5179.  move.w 6(a1,d3*8),d5    ; sec z
  5180.  cmp.w d6,d5
  5181.  bgt bothinfront
  5182. ** line must be on right and partially behind.
  5183.  sub.w d4,d5    ; dz
  5184.  move.l (a1,d3*8),d2
  5185.  sub.l (a1,d1*8),d2    ; dx
  5186.  sub.w d4,d6
  5187.  asr.l #7,d2
  5188.  muls d6,d2    ; new x coord
  5189.  divs d5,d2
  5190.  ext.l d2
  5191.  asl.l #7,d2
  5192.  add.l (a1,d1*8),d2
  5193.  move.w minz,d5
  5194.  move.w (a2,d1*2),d0
  5195.  divs d5,d2
  5196.  add.w #47,d2
  5197.  move.l ypos,d1
  5198.  divs d4,d1
  5199.  move.w bottomline,d3 
  5200.  bra lineclipped
  5201.  
  5202. bothinfront:
  5203.  
  5204. * Also, usefully enough, both are on-screen
  5205. * so no bottom clipping is needed.
  5206.  
  5207.  move.w (a2,d1*2),d0    ; first x
  5208.  move.w (a2,d3*2),d2    ; second x
  5209.  move.l ypos,d1
  5210.  move.l d1,d3
  5211.  divs d4,d1        ; first y
  5212.  divs d5,d3        ; second y
  5213. lineclipped:
  5214.  move.l #rightsidetab,a3
  5215.  cmp.w d1,d3
  5216.  beq lineflat
  5217.  st drawit
  5218.  bgt lineonright
  5219.  move.l #leftsidetab,a3
  5220.  exg d1,d3
  5221.  exg d0,d2
  5222.  
  5223.  lea (a3,d1*2),a3
  5224.  
  5225.  cmp.w top(pc),d1
  5226.  bge.s .nonewtop
  5227.  move.w d1,top
  5228. .nonewtop:
  5229.  cmp.w bottom(pc),d3
  5230.  ble.s .nonewbot
  5231.  move.w d3,bottom
  5232. .nonewbot:
  5233.  
  5234.  sub.w d1,d3    ; dy
  5235.  sub.w d0,d2    ; dx
  5236.  
  5237.  blt .linegoingleft
  5238.  sub.w #1,d0
  5239.  
  5240.  ext.l d2
  5241.  divs d3,d2
  5242.  move.w d2,d6
  5243.  swap d2
  5244.  
  5245. ; moveq #0,d6
  5246. ; sub.w d3,d2
  5247. ; blt.s .noco
  5248. ;.makeco
  5249. ; addq #1,d6
  5250. ; sub.w d3,d2
  5251. ; bge.s .makeco
  5252. ;.noco
  5253. ; add.w d3,d2
  5254.  
  5255.  move.w d3,d4
  5256.  move.w d3,d5
  5257.  subq #1,d5
  5258.  move.w d6,d1
  5259.  addq #1,d1
  5260.  
  5261. .pixlopright:
  5262.  move.w d0,(a3)+
  5263.  sub.w d2,d4
  5264.  bge.s .nobigstep
  5265.  add.w d1,d0
  5266.  add.w d3,d4
  5267.  dbra d5,.pixlopright
  5268.  bra lineflat
  5269. .nobigstep
  5270.  add.w d6,d0
  5271.  dbra d5,.pixlopright
  5272.  bra lineflat
  5273.  
  5274. .linegoingleft:
  5275.  
  5276.  sub.w #1,d0
  5277.  
  5278.  neg.w d2
  5279.  
  5280.  ext.l d2
  5281.  divs d3,d2
  5282.  move.w d2,d6
  5283.  swap d2
  5284.  
  5285.  
  5286. ; moveq #0,d6
  5287. ; sub.w d3,d2
  5288. ; blt.s .nocol
  5289. ;.makecol
  5290. ; addq #1,d6
  5291. ; sub.w d3,d2
  5292. ; bge.s .makecol
  5293. ;.nocol
  5294. ; add.w d3,d2
  5295.  
  5296.  
  5297.  
  5298.  move.w d3,d4
  5299.  move.w d3,d5
  5300.  subq #1,d5
  5301.  
  5302.  move.w d6,d1
  5303.  addq #1,d1
  5304.  
  5305. .pixlopleft:
  5306.  sub.w d2,d4
  5307.  bge.s .nobigstepl
  5308.  sub.w d1,d0
  5309.  add.w d3,d4
  5310.  move.w d0,(a3)+
  5311.  dbra d5,.pixlopleft
  5312.  bra lineflat
  5313.  
  5314. .nobigstepl
  5315.  sub.w d6,d0
  5316.  move.w d0,(a3)+
  5317.  dbra d5,.pixlopleft
  5318.  bra lineflat
  5319.  
  5320. lineonright:
  5321.  
  5322.  lea (a3,d1*2),a3
  5323.  
  5324.  cmp.w top(pc),d1
  5325.  bge.s .nonewtop
  5326.  move.w d1,top
  5327. .nonewtop:
  5328.  cmp.w bottom(pc),d3
  5329.  ble.s .nonewbot
  5330.  move.w d3,bottom
  5331. .nonewbot:
  5332.  
  5333.  sub.w d1,d3    ; dy
  5334.  sub.w d0,d2    ; dx
  5335.  blt .linegoingleft
  5336. ; addq #1,d0
  5337.  ext.l d2
  5338.  divs d3,d2
  5339.  move.w d2,d6
  5340.  swap d2
  5341.  
  5342. ; moveq #0,d6
  5343. ; sub.w d3,d2
  5344. ; blt.s .noco
  5345. ;.makeco
  5346. ; addq #1,d6
  5347. ; sub.w d3,d2
  5348. ; bge.s .makeco
  5349. ;.noco
  5350. ; add.w d3,d2
  5351.  
  5352.  move.w d3,d4
  5353.  move.w d3,d5
  5354.  subq #1,d5
  5355.  move.w d6,d1
  5356.  addq #1,d1
  5357.  
  5358. .pixlopright:
  5359.  sub.w d2,d4
  5360.  bge.s .nobigstep
  5361.  add.w d1,d0
  5362.  add.w d3,d4
  5363.  move.w d0,(a3)+
  5364.  dbra d5,.pixlopright
  5365.  bra lineflat
  5366.  
  5367. .nobigstep
  5368.  add.w d6,d0
  5369.  move.w d0,(a3)+
  5370.  dbra d5,.pixlopright
  5371.  bra lineflat
  5372.  
  5373. .linegoingleft:
  5374. ; addq #1,d0
  5375.  neg.w d2
  5376.  
  5377.  ext.l d2
  5378.  divs d3,d2
  5379.  move.w d2,d6
  5380.  swap d2
  5381.  
  5382.  
  5383. ; moveq #0,d6
  5384. ; sub.w d3,d2
  5385. ; blt.s .nocol
  5386. ;.makecol
  5387. ; addq #1,d6
  5388. ; sub.w d3,d2
  5389. ; bge.s .makecol
  5390. ;.nocol
  5391. ; add.w d3,d2
  5392.  
  5393.  move.w d3,d4
  5394.  move.w d3,d5
  5395.  subq #1,d5
  5396.  move.w d6,d1
  5397.  addq #1,d1
  5398.  
  5399. .pixlopleft:
  5400.  move.w d0,(a3)+
  5401.  sub.w d2,d4
  5402.  bge.s .nobigstepl
  5403.  sub.w d1,d0
  5404.  add.w d3,d4
  5405.  dbra d5,.pixlopleft
  5406.  bra lineflat
  5407.  
  5408. .nobigstepl
  5409.  sub.w d6,d0
  5410.  dbra d5,.pixlopleft
  5411.  
  5412. lineflat:
  5413.  
  5414. bothbehind:
  5415.  dbra d7,sideloop
  5416.  bra pastsides
  5417.  
  5418. fbr: dc.w 0
  5419. sbr: dc.w 0
  5420.  
  5421. goursides:
  5422.  
  5423.  move.w #80,top
  5424.  move.w #-1,bottom
  5425.  move.w #0,drawit
  5426.  move.l #Rotated,a1
  5427.  move.l #OnScreen,a2
  5428.  move.w (a0)+,d7    ; no of sides
  5429. sideloopGOUR:
  5430.  move.w minz,d6
  5431.  move.w (a0)+,d1
  5432.  move.w (a0),d3
  5433.  
  5434.  move.l PointBrightsPtr,a4
  5435.  move.w (a4,d1.w*4),fbr
  5436.  move.w (a4,d3.w*4),sbr
  5437.  
  5438.  move.w 6(a1,d1*8),d4    ;first z
  5439.  cmp.w d6,d4
  5440.  bgt firstinfrontGOUR
  5441.  move.w 6(a1,d3*8),d5    ; sec z
  5442.  cmp.w d6,d5
  5443.  ble bothbehindGOUR
  5444. ** line must be on left and partially behind.
  5445.  sub.w d5,d4
  5446.  
  5447.  move.w fbr,d0
  5448.  sub.w sbr,d0
  5449.  sub.w d5,d6
  5450.  muls d6,d0
  5451.  divs d4,d0
  5452.  add.w sbr,d0
  5453.  move.w d0,fbr
  5454.  
  5455.  move.l (a1,d1*8),d0
  5456.  sub.l (a1,d3*8),d0
  5457.  asr.l #7,d0
  5458.  muls d6,d0    ; new x coord
  5459.  divs d4,d0
  5460.  ext.l d0
  5461.  asl.l #7,d0
  5462.  
  5463.  add.l (a1,d3*8),d0
  5464.  move.w minz,d4
  5465.  move.w (a2,d3*2),d2
  5466.  divs d4,d0
  5467.  add.w #47,d0
  5468.  move.l ypos,d3
  5469.  divs d5,d3
  5470.  
  5471.  move.w bottomline,d1 
  5472.  bra lineclippedGOUR
  5473.  
  5474. firstinfrontGOUR:
  5475.  move.w 6(a1,d3*8),d5    ; sec z
  5476.  cmp.w d6,d5
  5477.  bgt bothinfrontGOUR
  5478. ** line must be on right and partially behind.
  5479.  sub.w d4,d5    ; dz
  5480.  
  5481.  move.w sbr,d2
  5482.  sub.w fbr,d2
  5483.  sub.w d4,d6
  5484.  muls d6,d2
  5485.  divs d5,d2
  5486.  add.w fbr,d2
  5487.  move.w d2,sbr
  5488.  
  5489.  move.l (a1,d3*8),d2
  5490.  sub.l (a1,d1*8),d2    ; dx
  5491.  asr.l #7,d2
  5492.  muls d6,d2    ; new x coord
  5493.  divs d5,d2
  5494.  ext.l d2
  5495.  asl.l #7,d2
  5496.  add.l (a1,d1*8),d2
  5497.  move.w minz,d5
  5498.  move.w (a2,d1*2),d0
  5499.  divs d5,d2
  5500.  add.w #47,d2
  5501.  move.l ypos,d1
  5502.  divs d4,d1
  5503.  move.w bottomline,d3 
  5504.  bra lineclippedGOUR
  5505.  
  5506. bothinfrontGOUR:
  5507.  
  5508. * Also, usefully enough, both are on-screen
  5509. * so no bottom clipping is needed.
  5510.  
  5511.  move.w (a2,d1*2),d0    ; first x
  5512.  move.w (a2,d3*2),d2    ; second x
  5513.  move.l ypos,d1
  5514.  move.l d1,d3
  5515.  divs d4,d1        ; first y
  5516.  divs d5,d3        ; second y
  5517. lineclippedGOUR:
  5518.  move.l #rightsidetab,a3
  5519.  cmp.w d1,d3
  5520.  bne linenotflatGOUR
  5521.  
  5522. ; move.w fbr,d4
  5523. ; move.w sbr,d5
  5524. ; cmp.w d0,d2
  5525. ; bgt.s .nsw
  5526. ; exg d4,d5
  5527. ;.nsw:
  5528.  
  5529. ; move.l #leftbrighttab,a3
  5530. ; move.w d4,(a3,d3.w)
  5531. ; move.l #rightbrighttab,a3
  5532. ; move.w d5,(a3,d3.w) 
  5533.  bra lineflatGOUR
  5534.  
  5535. linenotflatGOUR
  5536.  st drawit
  5537.  bgt lineonrightGOUR
  5538.  move.l #leftsidetab,a3
  5539.  exg d1,d3
  5540.  exg d0,d2
  5541.  
  5542.  lea (a3,d1*2),a3
  5543.  lea leftbrighttab-leftsidetab(a3),a4
  5544.  
  5545.  cmp.w top(pc),d1
  5546.  bge.s .nonewtop
  5547.  move.w d1,top
  5548. .nonewtop:
  5549.  cmp.w bottom(pc),d3
  5550.  ble.s .nonewbot
  5551.  move.w d3,bottom
  5552. .nonewbot:
  5553.  
  5554.  sub.w d1,d3    ; dy
  5555.  sub.w d0,d2    ; dx
  5556.  
  5557.  blt .linegoingleft
  5558.  sub.w #1,d0
  5559.  
  5560.  ext.l d2
  5561.  divs d3,d2
  5562.  move.w d2,d6
  5563.  swap d2
  5564.  move.w d2,a5
  5565.  
  5566. ; moveq #0,d6
  5567. ; sub.w d3,d2
  5568. ; blt.s .noco
  5569. ;.makeco
  5570. ; addq #1,d6
  5571. ; sub.w d3,d2
  5572. ; bge.s .makeco
  5573. ;.noco
  5574. ; add.w d3,d2
  5575.  
  5576.  move.w d3,d4
  5577.  move.w d3,d5
  5578.  subq #1,d5
  5579.  move.w d6,d1
  5580.  addq #1,d1
  5581.  move.w d1,a6
  5582.  
  5583.  moveq #0,d1
  5584.  move.w sbr,d1
  5585.  move.w fbr,d2
  5586.  sub.w d1,d2
  5587.  ext.l d2
  5588.  asl.w #8,d2
  5589.  asl.w #3,d2
  5590.  divs d3,d2 
  5591.  ext.l d2
  5592.  asl.l #5,d2
  5593.  swap d1
  5594.  
  5595. .pixlopright:
  5596.  move.w d0,(a3)+
  5597.  swap d1
  5598.  move.w d1,(a4)+
  5599.  swap d1
  5600.  add.l d2,d1
  5601.  
  5602.  sub.w a5,d4
  5603.  bge.s .nobigstep
  5604.  add.w a6,d0
  5605.  add.w d3,d4
  5606.  dbra d5,.pixlopright
  5607.  bra lineflatGOUR
  5608. .nobigstep
  5609.  
  5610.  add.w d6,d0
  5611.  dbra d5,.pixlopright
  5612.  bra lineflatGOUR
  5613.  
  5614. .linegoingleft:
  5615.  
  5616.  sub.w #1,d0
  5617.  
  5618.  neg.w d2
  5619.  
  5620.  ext.l d2
  5621.  divs d3,d2
  5622.  move.w d2,d6
  5623.  swap d2
  5624.  
  5625.  
  5626. ; moveq #0,d6
  5627. ; sub.w d3,d2
  5628. ; blt.s .nocol
  5629. ;.makecol
  5630. ; addq #1,d6
  5631. ; sub.w d3,d2
  5632. ; bge.s .makecol
  5633. ;.nocol
  5634. ; add.w d3,d2
  5635.  
  5636.  move.w d3,d4
  5637.  move.w d3,d5
  5638.  subq #1,d5
  5639.  
  5640.  move.w d6,d1
  5641.  addq #1,d1
  5642.  move.w d1,a6
  5643.  move.w d2,a5
  5644.  
  5645.  moveq #0,d1
  5646.  move.w sbr,d1
  5647.  move.w fbr,d2
  5648.  sub.w d1,d2
  5649.  ext.l d2
  5650.  asl.w #8,d2
  5651.  asl.w #3,d2
  5652.  divs d3,d2 
  5653.  ext.l d2
  5654.  asl.l #5,d2
  5655.  swap d1
  5656.  
  5657. .pixlopleft:
  5658.  
  5659.  swap d1
  5660.  move.w d1,(a4)+
  5661.  swap d1
  5662.  add.l d2,d1
  5663.  
  5664.  sub.w a5,d4
  5665.  bge.s .nobigstepl
  5666.  sub.w a6,d0
  5667.  add.w d3,d4
  5668.  move.w d0,(a3)+
  5669.  dbra d5,.pixlopleft
  5670.  bra lineflatGOUR
  5671.  
  5672. .nobigstepl
  5673.  sub.w d6,d0
  5674.  move.w d0,(a3)+
  5675.  dbra d5,.pixlopleft
  5676.  bra lineflatGOUR
  5677.  
  5678. lineonrightGOUR:
  5679.  
  5680.  lea (a3,d1*2),a3
  5681.  
  5682.  lea rightbrighttab-rightsidetab(a3),a4
  5683.  
  5684.  cmp.w top(pc),d1
  5685.  bge.s .nonewtop
  5686.  move.w d1,top
  5687. .nonewtop:
  5688.  cmp.w bottom(pc),d3
  5689.  ble.s .nonewbot
  5690.  move.w d3,bottom
  5691. .nonewbot:
  5692.  
  5693.  sub.w d1,d3    ; dy
  5694.  sub.w d0,d2    ; dx
  5695.  blt .linegoingleft
  5696. ; addq #1,d0
  5697.  ext.l d2
  5698.  divs d3,d2
  5699.  move.w d2,d6
  5700.  swap d2
  5701.  
  5702. ; moveq #0,d6
  5703. ; sub.w d3,d2
  5704. ; blt.s .noco
  5705. ;.makeco
  5706. ; addq #1,d6
  5707. ; sub.w d3,d2
  5708. ; bge.s .makeco
  5709. ;.noco
  5710. ; add.w d3,d2
  5711.  
  5712.  move.w d3,d4
  5713.  move.w d3,d5
  5714.  subq #1,d5
  5715.  move.w d6,d1
  5716.  addq #1,d1
  5717.  
  5718.  move.w d1,a6
  5719.  move.w d2,a5
  5720.  
  5721.  moveq #0,d1
  5722.  move.w fbr,d1
  5723.  move.w sbr,d2
  5724.  sub.w d1,d2
  5725.  ext.l d2
  5726.  asl.w #8,d2
  5727.  asl.w #3,d2
  5728.  divs d3,d2 
  5729.  ext.l d2
  5730.  asl.l #5,d2
  5731.  swap d1
  5732.  
  5733. .pixlopright:
  5734.  
  5735.  swap d1
  5736.  move.w d1,(a4)+
  5737.  swap d1
  5738.  add.l d2,d1
  5739.  
  5740.  sub.w a5,d4
  5741.  bge.s .nobigstep
  5742.  add.w a6,d0
  5743.  add.w d3,d4
  5744.  move.w d0,(a3)+
  5745.  dbra d5,.pixlopright
  5746.  bra lineflatGOUR
  5747.  
  5748. .nobigstep
  5749.  add.w d6,d0
  5750.  move.w d0,(a3)+
  5751.  dbra d5,.pixlopright
  5752.  bra lineflatGOUR
  5753.  
  5754. .linegoingleft:
  5755. ; addq #1,d0
  5756.  neg.w d2
  5757.  
  5758.  ext.l d2
  5759.  divs d3,d2
  5760.  move.w d2,d6
  5761.  swap d2
  5762.  
  5763.  
  5764. ; moveq #0,d6
  5765. ; sub.w d3,d2
  5766. ; blt.s .nocol
  5767. ;.makecol
  5768. ; addq #1,d6
  5769. ; sub.w d3,d2
  5770. ; bge.s .makecol
  5771. ;.nocol
  5772. ; add.w d3,d2
  5773.  
  5774.  move.w d3,d4
  5775.  move.w d3,d5
  5776.  subq #1,d5
  5777.  move.w d6,d1
  5778.  addq #1,d1
  5779.  move.w d1,a6
  5780.  move.w d2,a5
  5781.  
  5782.  moveq #0,d1
  5783.  move.w fbr,d1
  5784.  move.w sbr,d2
  5785.  sub.w d1,d2
  5786.  ext.l d2
  5787.  asl.w #8,d2
  5788.  asl.w #3,d2
  5789.  divs d3,d2 
  5790.  ext.l d2
  5791.  asl.l #5,d2
  5792.  swap d1
  5793.  
  5794. .pixlopleft:
  5795.  
  5796.  swap d1
  5797.  move.w d1,(a4)+
  5798.  swap d1
  5799.  add.l d2,d1
  5800.  
  5801.  move.w d0,(a3)+
  5802.  sub.w a5,d4
  5803.  bge.s .nobigstepl
  5804.  sub.w a6,d0
  5805.  add.w d3,d4
  5806.  dbra d5,.pixlopleft
  5807.  bra lineflatGOUR
  5808.  
  5809. .nobigstepl
  5810.  sub.w d6,d0
  5811.  dbra d5,.pixlopleft
  5812.  
  5813. lineflatGOUR:
  5814.  
  5815. bothbehindGOUR:
  5816.  dbra d7,sideloopGOUR
  5817.  
  5818. pastsides:
  5819.  
  5820.  
  5821.  addq #2,a0
  5822.  
  5823.  move.w #104*4,linedir
  5824.  move.l frompt,a6
  5825.  add.l #104*4*41,a6
  5826.  move.w (a0)+,scaleval
  5827.  move.w (a0)+,whichtile
  5828.  move.w (a0)+,d6
  5829.  add.w ZoneBright,d6
  5830.  move.w d6,lighttype
  5831.  move.w above(pc),d6
  5832.  beq groundfloor
  5833. * on ceiling:
  5834.  move.w #-104*4,linedir
  5835.  suba.w #104*4,a6
  5836. groundfloor:
  5837.  
  5838.  move.w xoff,d6
  5839.  move.w zoff,d7
  5840.  add.w xwobxoff,d7
  5841.  add.w xwobzoff,d6
  5842.  swap d6
  5843.  swap d7
  5844.  clr.w d6
  5845.  clr.w d7
  5846.  move.w scaleval(pc),d3
  5847.  beq.s .samescale
  5848.  bgt.s .scaledown
  5849.  neg.w d3
  5850.  asr.l d3,d7
  5851.  asr.l d3,d6
  5852.  bra.s .samescale
  5853. .scaledown:
  5854.  asl.l d3,d6
  5855.  asl.l d3,d7
  5856. .samescale
  5857.  move.l d6,sxoff
  5858.  move.l d7,szoff
  5859.  bra pastscale 
  5860.  
  5861.  asr.l #3,d1
  5862.  asr.l #3,d2
  5863.  asr.l #2,d1
  5864.  asr.l #2,d2
  5865.  asr.l #1,d1
  5866.  asr.l #1,d2
  5867. scaleprogfrom
  5868.  nop
  5869.  nop
  5870.  asl.l #1,d1
  5871.  asl.l #1,d2
  5872.  asl.l #2,d1
  5873.  asl.l #2,d2
  5874.  asl.l #3,d1
  5875.  asl.l #3,d2
  5876.  
  5877. top: dc.w 0
  5878. bottom: dc.w 0
  5879. ypos: dc.l 0
  5880. nfloors: dc.w 0
  5881. lighttype: dc.w 0
  5882. above: dc.w 0 
  5883. linedir: dc.w 0
  5884. distaddr: dc.w 0
  5885.  
  5886. minz: dc.w 0
  5887. leftsidetab:
  5888.  ds.w 180
  5889. rightsidetab:
  5890.  ds.w 180
  5891. leftbrighttab:
  5892.  ds.w 180
  5893. rightbrighttab:
  5894.  ds.w 180
  5895.  
  5896. PointBrights:
  5897.  dc.l 0
  5898. CurrentPointBrights:
  5899.  ds.l 1000
  5900.  
  5901. movespd: dc.w 0
  5902. largespd: dc.l 0
  5903. disttobot: dc.w 0
  5904.  
  5905. pastscale:
  5906.  
  5907.  tst.b drawit(pc)
  5908.  beq dontdrawfloor
  5909.  
  5910.  move.l a0,-(a7)
  5911.  
  5912.  move.l #leftsidetab,a4
  5913.  move.w top(pc),d1
  5914.  
  5915.  move.w #39,d7
  5916.  sub.w d1,d7
  5917.  move.w d7,disttobot
  5918.  
  5919.  move.w bottom(pc),d7
  5920.  tst.w above
  5921.  beq.s clipfloor
  5922.  
  5923.  move.w #40,d3
  5924.  move.w d3,d4
  5925.  sub.w topclip,d3
  5926.  sub.w botclip,d4
  5927.  cmp.w d3,d1
  5928.  bge predontdrawfloor
  5929.  cmp.w d4,d7
  5930.  blt predontdrawfloor
  5931.  cmp.w d4,d1
  5932.  bge.s .nocliptoproof
  5933.  move.w d4,d1
  5934. .nocliptoproof
  5935.  cmp.w d3,d7
  5936.  blt doneclip
  5937.  move.w d3,d7
  5938.  bra doneclip
  5939.  
  5940. clipfloor:
  5941.  move.w botclip,d4
  5942.  sub.w #40,d4
  5943.  cmp.w d4,d1
  5944.  bge predontdrawfloor
  5945.  move.w topclip,d3
  5946.  sub.w #40,d3
  5947.  cmp.w d3,d1
  5948.  bge.s .nocliptopfloor
  5949.  move.w d3,d1
  5950. .nocliptopfloor 
  5951.  cmp.w d3,d7
  5952.  ble predontdrawfloor
  5953.  cmp.w d4,d7
  5954.  blt.s .noclipbotfloor
  5955.  move.w d4,d7
  5956. .noclipbotfloor:
  5957.  
  5958. doneclip:
  5959.  
  5960.  lea (a4,d1*2),a4
  5961. ; move.l #dists,a2
  5962.  move.w distaddr,d0
  5963.  muls #64,d0
  5964.  move.l d0,a2
  5965. ; muls #25,d0
  5966. ; adda.w d0,a2
  5967. ; lea (a2,d1*2),a2
  5968.  sub.w d1,d7
  5969.  ble predontdrawfloor 
  5970.  move.w d1,d0
  5971.  bne.s .notzero
  5972.  moveq #1,d0
  5973. .notzero
  5974.  muls linedir,d1
  5975.  add.l d1,a6
  5976.  move.l #floorscalecols,a1
  5977.  move.l LineToUse,a5
  5978.  
  5979.  tst.b gourfloor
  5980.  bne dogourfloor
  5981.  
  5982.  tst.b anyclipping
  5983.  beq dofloornoclip
  5984.  
  5985. dofloor:
  5986. ; move.w (a2)+,d0
  5987.  move.w leftclip(pc),d3
  5988.  move.w rightclip(pc),d4
  5989.  move.w rightsidetab-leftsidetab(a4),d2
  5990.  
  5991.  addq #1,d2
  5992.  cmp.w d3,d2
  5993.  ble.s nodrawline
  5994.  cmp.w d4,d2
  5995.  ble.s noclipright
  5996.  move.w d4,d2
  5997. noclipright:
  5998.  move.w (a4),d1
  5999.  cmp.w d4,d1
  6000.  bge.s nodrawline
  6001.  cmp.w d3,d1
  6002.  bge.s noclipleft
  6003.  move.w d3,d1
  6004. noclipleft:
  6005.  cmp.w d1,d2
  6006.  ble.s nodrawline
  6007.  
  6008.  move.w d1,leftedge
  6009.  move.w d2,rightedge
  6010.  
  6011. ; moveq #0,d1
  6012. ; moveq #0,d3
  6013. ; move.w leftbrighttab-leftsidetab(a4),d1
  6014. ; bge.s .okbl
  6015. ; moveq #0,d1
  6016. ;.okbl:
  6017.  
  6018. ; move.w rightbrighttab-leftsidetab(a4),d3
  6019. ; bge.s .okbr
  6020. ; moveq #0,d3
  6021. ;.okbr:
  6022.  
  6023. ; sub.w d1,d3
  6024. ; asl.w #8,d1
  6025. ; move.l d1,leftbright
  6026. ; swap d3
  6027. ; asr.l #5,d3
  6028. ; divs d5,d3
  6029. ; move.w d3,d5
  6030. ; muls.w d6,d5
  6031. ; asr.l #3,d5
  6032. ; clr.b d5
  6033. ; add.w d5,leftbright+2
  6034.  
  6035. ; ext.l d3
  6036. ; asl.l #5,d3
  6037. ; swap d3
  6038. ; asl.w #8,d3
  6039. ; move.l d3,brightspd
  6040.  
  6041.  move.l a6,a3
  6042.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6043.  move.l a2,d7
  6044.  divs d0,d7
  6045.  move.w d7,d0
  6046.  jsr (a5)
  6047.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6048. nodrawline
  6049.  sub.w #1,disttobot
  6050.  adda.w linedir(pc),a6
  6051.  addq #2,a4
  6052.  addq #1,d0
  6053.  subq #1,d7
  6054.  bgt dofloor
  6055.  
  6056. predontdrawfloor
  6057.  move.l (a7)+,a0
  6058.  
  6059. dontdrawfloor:
  6060.  
  6061.  CACHE_FREEZE_OFF d2
  6062.  rts
  6063.  
  6064. anyclipping: dc.w 0
  6065.  
  6066. dofloornoclip:
  6067. ; move.w (a2)+,d0
  6068.  move.w rightsidetab-leftsidetab(a4),d2
  6069.  addq #1,d2
  6070.  move.w (a4)+,d1
  6071.  move.w d1,leftedge
  6072.  move.w d2,rightedge
  6073.  
  6074. ; sub.w d1,d2
  6075.  
  6076. ; moveq #0,d1
  6077. ; moveq #0,d3
  6078. ; move.w leftbrighttab-leftsidetab(a4),d1
  6079. ; bge.s .okbl
  6080. ; moveq #0,d1
  6081. ;.okbl:
  6082.  
  6083. ; move.w rightbrighttab-leftsidetab(a4),d3
  6084. ; bge.s .okbr
  6085. ; moveq #0,d3
  6086. ;.okbr:
  6087.  
  6088. ; sub.w d1,d3
  6089. ; asl.w #8,d1
  6090. ; move.l d1,leftbright
  6091. ; swap d3
  6092. ; asr.l #5,d3
  6093. ; divs d2,d3
  6094. ; ext.l d3
  6095. ; asl.l #5,d3
  6096. ; swap d3
  6097. ; asl.w #8,d3
  6098. ; move.l d3,brightspd
  6099.  
  6100.  move.l a6,a3
  6101.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6102.  move.l a2,d7
  6103.  divs d0,d7
  6104.  move.w d7,d0
  6105.  jsr (a5)
  6106.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6107.  sub.w #1,disttobot
  6108.  adda.w linedir(pc),a6
  6109.  addq #1,d0
  6110.  subq #1,d7
  6111.  bgt dofloornoclip
  6112.  
  6113.  bra predontdrawfloor
  6114.  
  6115. dogourfloor:
  6116.  tst.b anyclipping
  6117.  beq dofloornoclipGOUR
  6118.  
  6119. dofloorGOUR:
  6120. ; move.w (a2)+,d0
  6121.  move.w leftclip(pc),d3
  6122.  move.w rightclip(pc),d4
  6123.  move.w rightsidetab-leftsidetab(a4),d2
  6124.  
  6125.  move.w d2,d5
  6126.  sub.w (a4),d5
  6127.  addq #1,d5
  6128.  moveq #0,d6
  6129.  
  6130.  addq #1,d2
  6131.  cmp.w d3,d2
  6132.  ble nodrawlineGOUR
  6133.  cmp.w d4,d2
  6134.  ble.s nocliprightGOUR
  6135.  move.w d4,d2
  6136. nocliprightGOUR:
  6137.  move.w (a4),d1
  6138.  cmp.w d4,d1
  6139.  bge nodrawlineGOUR
  6140.  cmp.w d3,d1
  6141.  bge.s noclipleftGOUR
  6142.  move.w d3,d6
  6143.  subq #1,d6
  6144.  sub.w d1,d6
  6145.  move.w d3,d1
  6146. noclipleftGOUR:
  6147.  cmp.w d1,d2
  6148.  ble nodrawlineGOUR
  6149.  
  6150.  move.w d1,leftedge
  6151.  move.w d2,rightedge
  6152.  
  6153.  move.l a2,d2
  6154.  divs d0,d2
  6155.  move.w d2,dst
  6156.  asr.w #7,d2
  6157. ; addq #5,d2
  6158. ; add.w lighttype,d2
  6159.  
  6160.  moveq #0,d1
  6161.  moveq #0,d3
  6162.  move.w leftbrighttab-leftsidetab(a4),d1
  6163.  add.w d2,d1
  6164.  bge.s .okbl
  6165.  moveq #0,d1
  6166. .okbl:
  6167.  asr.w #1,d1
  6168.  cmp.w #14,d1
  6169.  ble.s .okdl
  6170.  move.w #14,d1
  6171. .okdl:
  6172.  
  6173.  move.w rightbrighttab-leftsidetab(a4),d3
  6174.  add.w d2,d3
  6175.  bge.s .okbr
  6176.  moveq #0,d3
  6177. .okbr:
  6178.  asr.w #1,d3
  6179.  cmp.w #14,d3
  6180.  ble.s .okdr
  6181.  move.w #14,d3
  6182. .okdr:
  6183.  
  6184.  sub.w d1,d3
  6185.  asl.w #8,d1
  6186.  move.l d1,leftbright
  6187.  swap d3
  6188.  tst.l d3
  6189.  bgt.s .OKITSPOSALREADY 
  6190.  neg.l d3
  6191.  asr.l #5,d3
  6192.  divs d5,d3
  6193.  neg.w d3
  6194.  bra.s .OKNOWITSNEG
  6195.  
  6196. .OKITSPOSALREADY
  6197.  asr.l #5,d3
  6198.  divs d5,d3
  6199. .OKNOWITSNEG
  6200.  muls d3,d6
  6201.  add.w #256*8,d6
  6202.  asr.w #3,d6
  6203.  clr.b d6
  6204.  add.w d6,leftbright+2
  6205.  
  6206.  ext.l d3
  6207.  asl.l #5,d3
  6208.  swap d3
  6209.  asl.w #8,d3
  6210.  move.l d3,brightspd
  6211.  
  6212.  move.l a6,a3
  6213.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6214.  move.w dst,d0
  6215.  lea floorscalecols,a1
  6216.  move.l floortile,a0
  6217.  adda.w whichtile,a0
  6218.  jsr pastfloorbright
  6219.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6220. nodrawlineGOUR
  6221.  
  6222.  sub.w #1,disttobot
  6223.  
  6224.  adda.w linedir(pc),a6
  6225.  addq #2,a4
  6226.  addq #1,d0
  6227.  subq #1,d7
  6228.  bgt dofloorGOUR
  6229.  
  6230. predontdrawfloorGOUR
  6231.  move.l (a7)+,a0
  6232.  
  6233. dontdrawfloorGOUR:
  6234.  
  6235.  CACHE_FREEZE_OFF d2
  6236.  rts
  6237.  
  6238. dofloornoclipGOUR:
  6239. ; move.w (a2)+,d0
  6240.  move.w rightsidetab-leftsidetab(a4),d2
  6241.  addq #1,d2
  6242.  move.w (a4),d1
  6243.  move.w d1,leftedge
  6244.  move.w d2,rightedge
  6245.  
  6246.  sub.w d1,d2
  6247.  
  6248.  move.l a2,d6
  6249.  divs d0,d6
  6250.  move.w d6,d5
  6251.  asr.w #7,d5
  6252. ; addq #5,d5
  6253. ; add.w lighttype,d5
  6254.  
  6255.  moveq #0,d1
  6256.  moveq #0,d3
  6257.  move.w leftbrighttab-leftsidetab(a4),d1
  6258.  add.w d5,d1
  6259.  bge.s .okbl
  6260.  moveq #0,d1
  6261. .okbl:
  6262.  asr.w #1,d1
  6263.  cmp.w #14,d1
  6264.  ble.s .okdl
  6265.  move.w #14,d1
  6266. .okdl:
  6267.  
  6268.  move.w rightbrighttab-leftsidetab(a4),d3
  6269.  add.w d5,d3
  6270.  bge.s .okbr
  6271.  moveq #0,d3
  6272. .okbr:
  6273.  asr.w #1,d3
  6274.  cmp.w #14,d3
  6275.  ble.s .okdr
  6276.  move.w #14,d3
  6277. .okdr:
  6278.  
  6279.  sub.w d1,d3
  6280.  asl.w #8,d1
  6281.  move.l d1,leftbright
  6282.  swap d3
  6283.  asr.l #5,d3
  6284.  divs d2,d3
  6285.  ext.l d3
  6286.  asl.l #5,d3
  6287.  swap d3
  6288.  asl.w #8,d3
  6289.  move.l d3,brightspd
  6290.  
  6291.  
  6292.  move.l a6,a3
  6293.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6294.  move.w d6,d0
  6295.  move.w d0,dst
  6296.  lea floorscalecols,a1
  6297.  move.l floortile,a0
  6298.  adda.w whichtile,a0
  6299.  jsr pastfloorbright
  6300.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6301.  sub.w #1,disttobot
  6302.  adda.w linedir(pc),a6
  6303.  addq #2,a4
  6304.  addq #1,d0
  6305.  subq #1,d7
  6306.  bgt dofloornoclipGOUR
  6307.  
  6308.  bra predontdrawfloorGOUR
  6309.  
  6310.  
  6311.  
  6312. dists:
  6313. ; incbin "floordists"
  6314. drawit: dc.w 0
  6315.  
  6316. LineToUse: dc.l 0
  6317.  
  6318. ***************************
  6319. * Right then, time for the floor
  6320. * routine...
  6321. * For test purposes, give it
  6322. * a3 = point to screen
  6323. * d0= z distance away
  6324. * and sinval+cosval must be set up.
  6325. ***************************
  6326.  
  6327. BLACKFLOOR:
  6328.  moveq #0,d0
  6329.  bra.s DOBLACK
  6330.  
  6331. SimpleFloorLine:
  6332.  
  6333.  CACHE_OFF d2
  6334.  
  6335.  move.l #doacrossline,a1
  6336.  move.w leftedge(pc),d1
  6337.  move.w rightedge(pc),d3
  6338.  sub.w d1,d3
  6339.  lea (a1,d1.w*4),a1
  6340.  move.w (a1,d3.w*4),d4
  6341.  move.w #$4e75,(a1,d3.w*4)
  6342.  
  6343.  tst.b CLRNOFLOOR
  6344.  bne.s BLACKFLOOR
  6345.  
  6346.  move.l #PLAINSCALE,a2
  6347.  
  6348.  move.w d0,d2
  6349.  move.w lighttype,d1
  6350.  asr.w #8,d2
  6351.  add.w #5,d1
  6352.  add.w d2,d1
  6353.  bge.s .fixedbright
  6354.  moveq #0,d1
  6355. .fixedbright:
  6356.  cmp.w #28,d1
  6357.  ble.s .smallbright
  6358.  move.w #28,d1
  6359. .smallbright:
  6360.  lea (a2,d1.w*2),a2
  6361.  
  6362.  move.w whichtile,d0
  6363.  move.w d0,d1
  6364.  and.w #$3,d1
  6365.  and.w #$300,d0
  6366.  lsl.b #6,d1
  6367.  move.b d1,d0
  6368.  move.w d0,tstwhich
  6369.  move.w (a2,d0.w),d0
  6370.  
  6371. DOBLACK:
  6372.  jsr (a1)
  6373.  move.w d4,(a1,d3.w*4)
  6374.  
  6375.  CACHE_ON d2
  6376.  
  6377.  rts
  6378.  
  6379. tstwhich: dc.w 0
  6380. whichtile: dc.w 0
  6381.   
  6382. PLAINSCALE: incbin "ab3:includes/plainscale"
  6383.   
  6384. storeit: dc.l 0
  6385.  
  6386. doacrossline:
  6387. val SET 0
  6388.  REPT 32
  6389.  move.w d0,val(a3)
  6390. val SET val+4
  6391.  ENDR
  6392. val SET val+4
  6393.  REPT 32
  6394.  move.w d0,val(a3)
  6395. val SET val+4
  6396.  ENDR
  6397. val SET val+4
  6398.  REPT 32
  6399.  move.w d0,val(a3)
  6400. val SET val+4
  6401.  ENDR
  6402.  rts
  6403.  
  6404.  
  6405. leftedge: dc.w 0
  6406. rightedge: dc.w 0
  6407.  
  6408. rndpt: dc.l rndtab
  6409.  
  6410.  
  6411. dst: dc.w 0
  6412.  
  6413. FloorLine:
  6414.  
  6415.  move.l floortile,a0
  6416.  adda.w whichtile,a0
  6417.  move.w lighttype,d1
  6418.  move.w d0,dst
  6419.  move.w d0,d2
  6420. *********************
  6421. * Old version
  6422.  asr.w #8,d2
  6423.  add.w #5,d1
  6424. *********************
  6425. ; asr.w #3,d2
  6426. ; sub.w #4,d2
  6427. ; cmp.w #6,d2
  6428. ; blt.s flbrbr
  6429. ; move.w #6,d2
  6430. ;flbrbr:
  6431. *********************
  6432.  add.w d2,d1
  6433.  bge.s .fixedbright
  6434.  moveq #0,d1
  6435. .fixedbright:
  6436.  cmp.w #28,d1
  6437.  ble.s .smallbright
  6438.  move.w #28,d1
  6439. .smallbright:
  6440.  lea floorscalecols,a1
  6441.  add.l floorbright(pc,d1.w*4),a1
  6442.  bra pastfloorbright
  6443.  
  6444. ConstCol: dc.w 0
  6445.  
  6446. BumpLine:
  6447.  
  6448.  tst.b smoothbumps
  6449.  beq.s Chunky
  6450.  
  6451.  move.l #SmoothTile,a0
  6452.  lea Smoothscalecols,a1
  6453.  bra pastast
  6454.  
  6455. Chunky:
  6456.  
  6457.  moveq #0,d2
  6458.  move.l #Bumptile,a0
  6459.  move.w whichtile,d2
  6460.  adda.w d2,a0
  6461.  ror.l #2,d2
  6462.  lsr.w #6,d2
  6463.  rol.l #2,d2
  6464.  and.w #15,d2
  6465.  move.l #ConstCols,a1
  6466.  move.w (a1,d2.w*2),ConstCol
  6467.  lea Bumpscalecols,a1
  6468.  
  6469. pastast:
  6470.  move.w lighttype,d1
  6471.  
  6472.  move.w d0,dst
  6473.  
  6474.  move.w d0,d2
  6475. *********************
  6476. * Old version
  6477.  asr.w #8,d2
  6478.  add.w #5,d1
  6479. *********************
  6480. ; asr.w #3,d2
  6481. ; sub.w #4,d2
  6482. ; cmp.w #6,d2
  6483. ; blt.s flbrbr
  6484. ; move.w #6,d2
  6485. ;flbrbr:
  6486. *********************
  6487.  add.w d2,d1
  6488.  bge.s .fixedbright
  6489.  moveq #0,d1
  6490. .fixedbright:
  6491.  cmp.w #28,d1
  6492.  ble.s .smallbright
  6493.  move.w #28,d1
  6494. .smallbright:
  6495.  add.l floorbright(pc,d1.w*4),a1
  6496.  bra pastfloorbright
  6497.  
  6498.  
  6499. floorbright:
  6500.  dc.l 512*0
  6501.  dc.l 512*1
  6502.  dc.l 512*1
  6503.  dc.l 512*2
  6504.  dc.l 512*2
  6505.  
  6506.  dc.l 512*3
  6507.  dc.l 512*3
  6508.  dc.l 512*4
  6509.  dc.l 512*4
  6510.  dc.l 512*5
  6511.  
  6512.  dc.l 512*5
  6513.  dc.l 512*6
  6514.  dc.l 512*6
  6515.  dc.l 512*7
  6516.  dc.l 512*7
  6517.  
  6518.  dc.l 512*8
  6519.  dc.l 512*8
  6520.  dc.l 512*9
  6521.  dc.l 512*9
  6522.  dc.l 512*10
  6523.  
  6524.  dc.l 512*10
  6525.  dc.l 512*11
  6526.  dc.l 512*11
  6527.  dc.l 512*12
  6528.  dc.l 512*12
  6529.  
  6530.  dc.l 512*13
  6531.  dc.l 512*13
  6532.  dc.l 512*14
  6533.  dc.l 512*14
  6534.  
  6535. widthleft: dc.w 0
  6536. scaleval: dc.w 0
  6537. sxoff: dc.l 0
  6538. szoff: dc.l 0
  6539. xoff34: dc.w 0
  6540. zoff34: dc.w 0
  6541. scosval: dc.w 0
  6542. ssinval: dc.w 0
  6543.  
  6544.  
  6545. floorsetbright:
  6546.  move.l #walltiles,a0
  6547.  
  6548. pastfloorbright
  6549.  
  6550.  move.w d0,d1
  6551.  muls cosval,d1    ; change in x across whole width
  6552.  move.w d0,d2
  6553.  muls sinval,d2    ; change in z across whole width
  6554.  neg.l d2
  6555. scaleprog:
  6556.  move.w scaleval(pc),d3
  6557.  beq.s .samescale
  6558.  bgt.s .scaledown
  6559.  neg.w d3
  6560.  asr.l d3,d1
  6561.  asr.l d3,d2
  6562.  bra.s .samescale
  6563. .scaledown:
  6564.  asl.l d3,d1
  6565.  asl.l d3,d2
  6566. .samescale
  6567.  
  6568.  move.l d1,d3 ;    z cos
  6569.  move.l d3,d6
  6570.  move.l d3,d5
  6571.  asr.l #1,d6
  6572.  add.l d6,d3
  6573.  asr.l #1,d3
  6574.  
  6575.  move.l d2,d4    ; z sin
  6576.  move.l d4,d6
  6577.  asr.l #1,d6
  6578.  add.l d4,d6
  6579.  add.l d3,d4
  6580.  neg.l d4    ; start x
  6581.  
  6582.  asr.l #1,d6    ; zsin/2
  6583.  sub.l d6,d5    ; start z
  6584.  
  6585.  add.l sxoff,d4
  6586.  add.l szoff,d5
  6587.  
  6588.  moveq #0,d6
  6589.  move.w leftedge(pc),d6
  6590.  beq.s nomultleft
  6591.  
  6592.  move.l d1,a4
  6593.  move.l d2,a5
  6594.  
  6595.  muls.l d6,d3:d1
  6596.  asr.l #6,d1
  6597.  add.l d1,d4
  6598.  
  6599.  muls.l d6,d3:d2
  6600.  asr.l #6,d2
  6601.  add.l d2,d5
  6602.  move.l a4,d1
  6603.  move.l a5,d2
  6604.  
  6605. nomultleft:
  6606.  
  6607.  move.w d4,startsmoothx
  6608.  move.w d5,startsmoothz
  6609.  
  6610.  swap d4
  6611.  asr.l #8,d5
  6612. ; add.w szoff,d5
  6613. ; add.w sxoff,d4
  6614.  and.w #63,d4
  6615.  and.w #63*256,d5
  6616.  move.b d4,d5
  6617.  
  6618.  asr.l #6,d1
  6619.  asr.l #6,d2
  6620.  move.w d1,a4
  6621.  move.w d2,a5
  6622.  asr.l #8,d2
  6623.  and.w #%0011111100000000,d2
  6624.  swap d1
  6625.  add.w d1,d2
  6626.  move.w #%11111100111111,d1
  6627.  and.w d1,d5
  6628.  swap d5
  6629.  move.w startsmoothz,d5
  6630.  swap d5
  6631.  swap d2
  6632.  move.w a5,d2
  6633.  swap d2
  6634.  
  6635. ***********************************
  6636.  
  6637.  move.w d6,a2
  6638.  move.l d2,d6
  6639.  add.w #256,d6
  6640.  
  6641.  moveq #0,d0
  6642.  
  6643.  tst.w a2
  6644.  beq startatleftedge
  6645.  
  6646.  move.w widthleft(pc),d4
  6647.  
  6648.  move.w rightedge(pc),d3
  6649.  
  6650.  cmp.w #31,a2
  6651.  bgt.s notinfirststrip
  6652.  lea (a3,a2.w*4),a3
  6653.  cmp.w #32,d3
  6654.  ble.s allinfirststrip
  6655.  move.w #32,d7
  6656.  sub.w d7,d3
  6657.  sub.w a2,d7
  6658.  bra intofirststrip
  6659.  
  6660. allinfirststrip
  6661.  sub.w a2,d3
  6662.  move.w d3,d7
  6663.  move.w #0,d4
  6664.  bra allintofirst
  6665.  
  6666. notinfirststrip:
  6667.  sub.w #32,a2
  6668.  sub.w #32,d3
  6669.  adda.w #33*4,a3
  6670.  cmp.w #31,a2
  6671.  bgt.s notstartinsec
  6672.  lea (a3,a2.w*4),a3
  6673.  cmp.w #32,d3
  6674.  ble.s allinsecstrip
  6675.  move.w #32,d7
  6676.  sub.w d7,d3
  6677.  sub.w a2,d7
  6678.  move.w d3,d4
  6679.  bra allintofirst
  6680.  
  6681. allinsecstrip
  6682.  sub.w a2,d3
  6683.  move.w d3,d7
  6684.  move.w #0,d4
  6685.  bra allintofirst
  6686.  rts
  6687.  
  6688. prot8: dc.w 0
  6689.  
  6690. notstartinsec:
  6691.  sub.w #32,a2
  6692.  sub.w #32,d3
  6693.  adda.w #33*4,a3
  6694.  lea (a3,a2.w*4),a3
  6695.  cmp.w #32,d3
  6696.  ble.s allinthirdstrip
  6697.  move.w #32,d7
  6698.  sub.w d7,d3
  6699.  sub.w a2,d7
  6700.  move.w d3,d4
  6701.  bra allintofirst
  6702.  rts
  6703.  
  6704. allinthirdstrip
  6705.  sub.w a2,d3
  6706.  move.w d3,d7
  6707.  move.w #0,d4
  6708.  bra allintofirst
  6709.  rts
  6710.  
  6711. startatleftedge:
  6712.  
  6713.  move.w rightedge(pc),d3
  6714.  sub.w a2,d3
  6715.  
  6716.  move.w d3,d7
  6717.  cmp.w #32,d7
  6718.  ble.s .notoowide
  6719.  move.w #32,d7
  6720. .notoowide:
  6721.  sub.w d7,d3
  6722. intofirststrip:
  6723.  
  6724.  move.w d3,d4
  6725. allintofirst:
  6726.  
  6727.  move.w startsmoothx,d3
  6728.  
  6729. tstwat:
  6730.  
  6731.  tst.b gourfloor
  6732.  bne gouraudfloor
  6733.  
  6734.  tst.b usewater
  6735.  bne texturedwater
  6736.  
  6737.  
  6738. ******************************
  6739. * BumpMap the floor/ceiling! *
  6740.  tst.b usebumps
  6741.  bne.s BumpMap
  6742. ******************************
  6743.  
  6744. ordinary:
  6745.  moveq #0,d0
  6746.  
  6747.  dbra d7,acrossscrn
  6748.  rts
  6749.  
  6750. usebumps: dc.w $0
  6751. smoothbumps: dc.w $0
  6752. gourfloor: dc.w 0
  6753.  
  6754.  include "ab3:source/bumpmap.s"
  6755.  
  6756.  CNOP 0,4
  6757. backbefore:
  6758.  and.w d1,d5
  6759.  move.b (a0,d5.w*4),d0
  6760.  add.w a4,d3
  6761.  move.w (a1,d0.w*2),(a3)
  6762.  addq #4,a3
  6763.  addx.l d6,d5
  6764.  dbcs d7,acrossscrn
  6765.  dbcc d7,backbefore
  6766.  bra.s past1
  6767.  
  6768. acrossscrn:
  6769.  and.w d1,d5
  6770.  move.b (a0,d5.w*4),d0
  6771.  add.w a4,d3
  6772.  move.w (a1,d0.w*2),(a3)
  6773.  addq #4,a3
  6774.  addx.l d2,d5
  6775.  dbcs d7,acrossscrn
  6776.  dbcc d7,backbefore
  6777. past1:
  6778.  bcc.s gotoacross
  6779.  
  6780.  move.w d4,d7
  6781.  bne.s .notdoneyet
  6782.  CACHE_FREEZE_ON d2
  6783.  rts
  6784. .notdoneyet:
  6785.  
  6786.  cmp.w #32,d7
  6787.  ble.s .notoowide
  6788.  move.w #32,d7
  6789. .notoowide
  6790.  sub.w d7,d4  
  6791.  addq #4,a3
  6792.  
  6793.  dbra d7,backbefore
  6794.  CACHE_FREEZE_ON d2
  6795.  rts
  6796.  
  6797.  
  6798. gotoacross:
  6799.  
  6800.  move.w d4,d7
  6801.  bne.s .notdoneyet
  6802.  CACHE_FREEZE_ON d2
  6803.  rts
  6804. .notdoneyet:
  6805.  
  6806.  cmp.w #32,d7
  6807.  ble.s .notoowide
  6808.  move.w #32,d7
  6809. .notoowide
  6810.  sub.w d7,d4  
  6811.  addq #4,a3
  6812.  
  6813.  dbra d7,acrossscrn
  6814.  CACHE_FREEZE_ON d2
  6815.  rts
  6816.  
  6817. leftbright: dc.l 0
  6818. brightspd: dc.l 0
  6819.  
  6820. gouraudfloor:
  6821.  move.l leftbright,d0
  6822.  move.l brightspd,d1
  6823.  dbra d7,acrossscrngour
  6824.  rts
  6825.  
  6826.  CNOP 0,4
  6827. backbeforegour:
  6828.  and.w #63*256+63,d5
  6829.  move.b (a0,d5.w*4),d0
  6830.  add.l d1,d0
  6831.  bcc.s .nomoreb
  6832.  add.w #256,d0
  6833. .nomoreb:
  6834.  add.w a4,d3
  6835.  move.w (a1,d0.w*2),(a3)
  6836.  addq #4,a3 
  6837.  addx.l d6,d5
  6838.  dbcs d7,acrossscrngour
  6839.  dbcc d7,backbeforegour
  6840.  bra.s past1gour
  6841.  
  6842. acrossscrngour:
  6843.  and.w #63*256+63,d5
  6844.  move.b (a0,d5.w*4),d0
  6845.  add.l d1,d0
  6846.  bcc.s .nomoreb
  6847.  add.w #256,d0
  6848. .nomoreb:
  6849.  add.w a4,d3
  6850.  move.w (a1,d0.w*2),(a3)
  6851.  addq #4,a3
  6852.  addx.l d2,d5
  6853.  dbcs d7,acrossscrngour
  6854.  dbcc d7,backbeforegour
  6855. past1gour:
  6856.  bcc.s gotoacrossgour
  6857.  
  6858.  move.w d4,d7
  6859.  bne.s .notdoneyet
  6860.  move.l d0,leftbright
  6861.  
  6862.  CACHE_FREEZE_ON d2
  6863.  rts
  6864. .notdoneyet:
  6865.  
  6866.  cmp.w #32,d7
  6867.  ble.s .notoowide
  6868.  move.w #32,d7
  6869. .notoowide
  6870.  sub.w d7,d4  
  6871.  addq #4,a3
  6872.  
  6873.  dbra d7,backbeforegour
  6874.  CACHE_FREEZE_ON d2
  6875.  rts
  6876.  
  6877.  
  6878. gotoacrossgour:
  6879.  
  6880.  move.w d4,d7
  6881.  bne.s .notdoneyet
  6882.  CACHE_FREEZE_ON d2
  6883.  rts
  6884. .notdoneyet:
  6885.  
  6886.  cmp.w #32,d7
  6887.  ble.s .notoowide
  6888.  move.w #32,d7
  6889. .notoowide
  6890.  sub.w d7,d4  
  6891.  addq #4,a3
  6892.  
  6893.  dbra d7,acrossscrngour
  6894.  CACHE_FREEZE_ON d2
  6895.  rts
  6896.  
  6897.  
  6898. waterpt: dc.l waterlist
  6899.  
  6900. waterlist:
  6901.  dc.l waterfile
  6902.  dc.l waterfile+2
  6903.  dc.l waterfile+256
  6904.  dc.l waterfile+256+2
  6905.  dc.l waterfile+512
  6906.  dc.l waterfile+512+2
  6907.  dc.l waterfile+768
  6908.  dc.l waterfile+768+2
  6909. ; dc.l waterfile+768
  6910. ; dc.l waterfile+512+2
  6911. ; dc.l waterfile+512
  6912. ; dc.l waterfile+256+2
  6913. ; dc.l waterfile+256
  6914. ; dc.l waterfile+2
  6915. endwaterlist:
  6916.  
  6917. watertouse: dc.l waterfile
  6918.  
  6919. wtan: dc.w 0
  6920. wateroff: dc.w 0
  6921.  
  6922. texturedwater:
  6923.  
  6924.  add.w wateroff,d5
  6925.  
  6926.  move.l #brightentab,a1
  6927.  move.w dst,d0
  6928.  clr.b d0
  6929.  
  6930.  add.w d0,d0
  6931.  cmp.w #12*512,d0
  6932.  blt.s .notoowater
  6933.  move.w #12*512,d0
  6934.  
  6935.  
  6936. .notoowater:
  6937.   
  6938.  adda.w d0,a1
  6939.  
  6940.  move.w dst,d0
  6941.  asl.w #7,d0
  6942.  add.w wtan,d0
  6943.  and.w #8191,d0
  6944.  move.l #SineTable,a0
  6945.  move.w (a0,d0.w),d0
  6946.  ext.l d0
  6947.  
  6948.  move.w dst,d3
  6949.  add.w #300,d3
  6950.  divs d3,d0
  6951.  asr.w #6,d0
  6952.  addq #2,d0
  6953.  cmp.w disttobot,d0
  6954.  blt.s oknotoffbototot
  6955.  
  6956.  move.w disttobot,d0
  6957.  subq #1,d0
  6958.  
  6959. oknotoffbototot
  6960.  
  6961. ; move.w dst,d3
  6962. ; asr.w #7,d3
  6963. ; add.w d3,d0
  6964.  
  6965.  muls #104*4,d0
  6966.  tst.w above
  6967.  beq.s nonnnnneg
  6968.  neg.l d0
  6969.  
  6970. nonnnnneg:
  6971.  
  6972.  move.l d0,a6
  6973.  
  6974.  move.l watertouse,a0
  6975.  
  6976.  move.w startsmoothx,d3
  6977.  dbra d7,acrossscrnw
  6978.  rts
  6979.  
  6980. backbeforew:
  6981.  and.w d1,d5
  6982.  move.w (a0,d5.w*4),d0
  6983.  move.b 1(a3,a6.w),d0
  6984.  move.w (a1,d0.w*2),(a3)
  6985.  addq #4,a3
  6986.  add.w a4,d3
  6987.  addx.l d6,d5
  6988.  dbcs d7,acrossscrnw
  6989.  dbcc d7,backbeforew
  6990.  bcc.s past1w
  6991.  add.w #256,d5 
  6992.  bra.s past1w
  6993.  
  6994. acrossscrnw:
  6995.  and.w d1,d5
  6996.  move.w (a0,d5.w*4),d0
  6997.  move.b 1(a3,a6.w),d0
  6998.  move.w (a1,d0.w*2),(a3)
  6999.  addq #4,a3
  7000.  add.w a4,d3
  7001.  addx.l d2,d5
  7002.  dbcs d7,acrossscrnw
  7003.  dbcc d7,backbeforew
  7004.  bcc.s past1w
  7005.  add.w #256,d5 
  7006. past1w:
  7007.  
  7008.  move.w d4,d7
  7009.  bne.s .notdoneyet
  7010.  rts
  7011. .notdoneyet:
  7012.  
  7013.  cmp.w #32,d7
  7014.  ble.s .notoowide
  7015.  move.w #32,d7
  7016. .notoowide
  7017.  sub.w d7,d4  
  7018.  addq #4,a3
  7019.  
  7020.  dbra d7,acrossscrnw
  7021.  CACHE_FREEZE_ON d2
  7022.  rts
  7023.  
  7024. usewater: dc.w 0
  7025.  dc.w 0
  7026. startsmoothx: dc.w 0
  7027.  dc.w 0
  7028. startsmoothz: dc.w 0
  7029.  
  7030. ********************************
  7031. *
  7032.  include "AB3:source/ObjDraw3.chipram"
  7033. *
  7034. ********************************
  7035.  
  7036. numframes:
  7037.  dc.w 0
  7038.  
  7039. alframe: dc.l 0
  7040.  
  7041. alan:
  7042.  dcb.l 8,0
  7043.  dcb.l 8,1
  7044.  dcb.l 8,2
  7045.  dcb.l 8,3
  7046. endalan:
  7047.  
  7048. alanptr: dc.l alan
  7049.  
  7050. Time2: dc.l 0
  7051. dispco:
  7052.  dc.w 0
  7053.  
  7054. KInt_Init    ;VBR Assumed $0
  7055.         move.l $68.w,OLDKINT
  7056.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  7057.         And.b    #$3f,$bfe201        Set Timers
  7058.         Move.b    #$7f,$bfed01
  7059.         Move.b    $bfed01,d0
  7060.         Move.b    #$88,$bfed01
  7061.         St.b    KInt_CCode        
  7062.         Move.b    #$a0,$bfee01        Start Timey Thing
  7063.         Rts                And return
  7064.  
  7065. OLDKINT: dc.l 0
  7066.  
  7067.  
  7068. KInt_Main    
  7069.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  7070.         Move.w    #8,$dff09a        Temp Disable Int.
  7071.         Move.w    $dff01e,d0        Intreqr
  7072.         And.w    #8,d0            Mask Out All X^ K_Int
  7073.     Beq    KInt_End            Not Keyboard Interrupt
  7074.         Lea    $bfed01,a6
  7075.         Move.w    #$8,$dff09c        Clear Int.Request
  7076.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  7077.         Ror.b    #1,d0            Roll to correct
  7078.         Not.b    d0            
  7079.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  7080. .HandShake    Move.b    #8,(a6)
  7081.         Move.b    #7,-$900(a6)
  7082.         Move.b    #0,-$800(a6)
  7083.         Move.b    #0,-$100(a6)
  7084.         Move.b    #$d1,$100(a6)        
  7085.         Tst.b    (a6)    
  7086. .wait        Btst    #0,(a6)
  7087.     Beq.s    .wait
  7088.         Move.b    #$a0,$100(a6)        
  7089.         Move.b    (a6),d0        
  7090.         Move.b    #$88,(a6)
  7091.         Lea    KeyMap,a1
  7092.         Moveq.w    #0,d0
  7093.         Move.b    KInt_CCode(pc),d0
  7094.     Bmi.s    KInt_KeyUp            neg if up 
  7095.  
  7096. KInt_KeyDown
  7097.         st (a1,d0.w)
  7098.         move.b d0,lastpressed
  7099.     Bra    KInt_End
  7100.  
  7101. KInt_KeyUp
  7102.         And.w    #$7f,d0            Make code Positive
  7103.         clr.b (a1,d0.w)
  7104. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  7105.     
  7106.         Move.w    #$8008,$dff09a        Re-enable Int.
  7107.         Rts
  7108.  
  7109. lastpressed:    dc.b 0
  7110. KInt_CCode    Ds.b    1
  7111. KInt_Askey    Ds.b    1
  7112. KInt_OCode    Ds.w    1
  7113.  
  7114.  
  7115. OldSpace: dc.b 0
  7116. SpaceTapped: dc.b 0
  7117. PLR1_SPCTAP: dc.b 0
  7118. PLR2_SPCTAP: dc.b 0
  7119. PLR1_Ducked: dc.b 0
  7120. PLR2_Ducked: dc.b 0
  7121.  even
  7122.  
  7123.  include "ab3:source/PLR1CONTROL.s"
  7124.  include "ab3:source/PLR2CONTROL.s"
  7125.  include "ab3:source/FALL.s"
  7126.  
  7127. prot7: dc.w 0
  7128.  
  7129. GOTTOSEND: dc.w 0
  7130.  
  7131. OtherInter:
  7132.  move.w #$0010,$dff000+intreq
  7133.  movem.l d0-d7/a0-a6,-(a7)
  7134.  bra.s justshake
  7135.  
  7136.     cnop 0,4
  7137.  
  7138. Chan0inter:
  7139.  
  7140.     SAVEREGS
  7141.     jsr    .routine
  7142.     GETREGS
  7143.     moveq    #0,d0
  7144.     rts
  7145.  
  7146. .routine
  7147.  
  7148.     FILTER
  7149.     
  7150. ;w move.w #$0010,$dff000+intreq
  7151.  
  7152.  tst.b doanything
  7153.  bne.s dosomething
  7154.  
  7155.  moveq #0,d0
  7156.  rts
  7157.  
  7158. dosomething:
  7159.  
  7160.  
  7161.  addq.w #1,FramesToDraw
  7162.  movem.l d0-d7/a0-a6,-(a7)
  7163.  
  7164. ; jsr INITREC
  7165. ; jsr RECEIVE
  7166.  
  7167. ; tst.l BUFFER
  7168. ; beq.s justshake
  7169. ; st GOTTOSEND
  7170. ; move.l #OtherInter,$6c
  7171.  
  7172. justshake:
  7173.  
  7174.  cmp.b #'b',Prefsfile+3
  7175.  bne.s .noback
  7176.  jsr mt_music
  7177. .noback:
  7178.  
  7179.  bra dontshowtime
  7180.  
  7181.  tst.b oktodisplay
  7182.  beq dontshowtime
  7183.  clr.b oktodisplay
  7184.  subq.w #1,dispco
  7185.  bgt dontshowtime
  7186.  move.w #10,dispco
  7187.  
  7188.  move.l #TimerScr+10,a0
  7189.  move.l TimeCount,d0
  7190.  bge.s timenotneg
  7191.  move.l #1111*256,d0
  7192. timenotneg:
  7193.  asr.l #8,d0
  7194.  move.l #digits,a1
  7195.  move.w #7,d2
  7196. digitlop
  7197.  divs #10,d0
  7198.  swap d0
  7199.  lea (a1,d0.w*8),a2
  7200.  move.b (a2)+,(a0)
  7201.  move.b (a2)+,24(a0)
  7202.  move.b (a2)+,24*2(a0)
  7203.  move.b (a2)+,24*3(a0)
  7204.  move.b (a2)+,24*4(a0)
  7205.  move.b (a2)+,24*5(a0)
  7206.  move.b (a2)+,24*6(a0)
  7207.  move.b (a2)+,24*7(a0)
  7208.  subq #1,a0
  7209.  swap d0
  7210.  ext.l d0
  7211.  dbra d2,digitlop
  7212.  
  7213.  move.l #TimerScr+10+24*10,a0
  7214.  move.l NumTimes,d0
  7215.  move.l #digits,a1
  7216.  move.w #3,d2
  7217. digitlop2
  7218.  divs #10,d0
  7219.  swap d0
  7220.  lea (a1,d0.w*8),a2
  7221.  move.b (a2)+,(a0)
  7222.  move.b (a2)+,24(a0)
  7223.  move.b (a2)+,24*2(a0)
  7224.  move.b (a2)+,24*3(a0)
  7225.  move.b (a2)+,24*4(a0)
  7226.  move.b (a2)+,24*5(a0)
  7227.  move.b (a2)+,24*6(a0)
  7228.  move.b (a2)+,24*7(a0)
  7229.  subq #1,a0
  7230.  swap d0
  7231.  ext.l d0
  7232.  dbra d2,digitlop2
  7233.  
  7234.  move.l #TimerScr+10+24*20,a0
  7235.  moveq #0,d0
  7236.  move.w FramesToDraw,d0
  7237.  move.l #digits,a1
  7238.  move.w #2,d2
  7239. digitlop3
  7240.  divs #10,d0
  7241.  swap d0
  7242.  lea (a1,d0.w*8),a2
  7243.  move.b (a2)+,(a0)
  7244.  move.b (a2)+,24(a0)
  7245.  move.b (a2)+,24*2(a0)
  7246.  move.b (a2)+,24*3(a0)
  7247.  move.b (a2)+,24*4(a0)
  7248.  move.b (a2)+,24*5(a0)
  7249.  move.b (a2)+,24*6(a0)
  7250.  move.b (a2)+,24*7(a0)
  7251.  subq #1,a0
  7252.  swap d0
  7253.  ext.l d0
  7254.  dbra d2,digitlop3
  7255.  
  7256. dontshowtime:
  7257.  
  7258.  
  7259.  move.l alanptr,a0
  7260.  move.l (a0)+,alframe
  7261.  cmp.l #endalan,a0
  7262.  blt.s nostartalan
  7263.  move.l #alan,a0
  7264. nostartalan:
  7265.  move.l a0,alanptr
  7266.  
  7267.  
  7268.  tst.b READCONTROLS
  7269.  beq.s nocontrols
  7270.  
  7271.  cmp.b #'s',mors
  7272.  beq.s control2
  7273.  
  7274.  tst.b PLR1MOUSE
  7275.  beq.s PLR1_nomouse
  7276.  bsr PLR1_mouse_control
  7277. PLR1_nomouse:
  7278.  tst.b PLR1KEYS
  7279.  beq.s PLR1_nokeys
  7280.  bsr PLR1_keyboard_control
  7281. PLR1_nokeys:
  7282. ; tst.b PLR1PATH
  7283. ; beq.s PLR1_nopath
  7284. ; bsr PLR1_follow_path
  7285. ;PLR1_nopath:
  7286.  tst.b PLR1JOY
  7287.  beq.s PLR1_nojoy
  7288.  bsr PLR1_JoyStick_control
  7289. PLR1_nojoy: 
  7290.  bra.s nocontrols
  7291.  
  7292. control2:
  7293.  tst.b PLR2MOUSE
  7294.  beq.s PLR2_nomouse
  7295.  bsr PLR2_mouse_control
  7296. PLR2_nomouse:
  7297.  tst.b PLR2KEYS
  7298.  beq.s PLR2_nokeys
  7299.  bsr PLR2_keyboard_control
  7300. PLR2_nokeys:
  7301. ; tst.b PLR2PATH
  7302. ; beq.s PLR2_nopath
  7303. ; bsr PLR1_follow_path
  7304. ;PLR2_nopath:
  7305.  tst.b PLR2JOY
  7306.  beq.s PLR2_nojoy
  7307.  bsr PLR2_JoyStick_control
  7308. PLR2_nojoy: 
  7309.  
  7310.  
  7311. nocontrols:
  7312.  
  7313.  move.l #$dff000,a6
  7314.  
  7315.  cmp.b #'4',Prefsfile+1
  7316.  bne.s nomuckabout
  7317.  
  7318.  move.w #$0,d0 
  7319.  tst.b NoiseMade0LEFT
  7320.  beq.s noturnoff0
  7321.  move.w #1,d0
  7322. noturnoff0:
  7323.  tst.b NoiseMade0RIGHT
  7324.  beq.s noturnoff1
  7325.  or.w #2,d0
  7326. noturnoff1:
  7327.  tst.b NoiseMade1RIGHT
  7328.  beq.s noturnoff2
  7329.  or.w #4,d0
  7330. noturnoff2:
  7331.  tst.b NoiseMade1LEFT
  7332.  beq.s noturnoff3
  7333.  or.w #8,d0
  7334. noturnoff3:
  7335.     move.w d0,dmacon(a6)
  7336.  
  7337. nomuckabout:
  7338.  
  7339.  
  7340. ; tst.b PLR2_fire
  7341. ; beq.s firenotpressed2
  7342. ; fire was pressed last time.
  7343. ; btst #7,$bfe001
  7344. ; bne.s firenownotpressed2
  7345. ; fire is still pressed this time.
  7346. ; st PLR2_fire
  7347. ; bra dointer
  7348.  
  7349. firenownotpressed2:
  7350. ; fire has been released.
  7351. ; clr.b PLR2_fire
  7352. ; bra dointer
  7353.  
  7354. firenotpressed2
  7355.  
  7356. ; fire was not pressed last frame...
  7357.  
  7358. ; btst #7,$bfe001
  7359. ; if it has still not been pressed, go back above
  7360. ; bne.s firenownotpressed2
  7361. ; fire was not pressed last time, and was this time, so has
  7362. ; been clicked.
  7363. ; st PLR2_clicked
  7364. ; st PLR2_fire
  7365.  
  7366. dointer
  7367.  
  7368.  cmp.b #'4',Prefsfile+1
  7369.     beq fourchannel
  7370.  
  7371.  btst #1,$dff000+intreqr
  7372.     bne.s newsampbitl
  7373.  
  7374.  movem.l (a7)+,d0-d7/a0-a6
  7375.  
  7376.  moveq #0,d0
  7377.  rts
  7378.  
  7379.  
  7380. swappedem: dc.w 0
  7381.  
  7382. newsampbitl:
  7383.  
  7384.  move.w #$820f,$dff000+dmacon
  7385.  
  7386.  move.w #$200,$dff000+intreq
  7387.  
  7388. ; tst.b CHANNELDATA
  7389. ; bne nochannel0
  7390.  
  7391.  move.l pos0LEFT,a0
  7392.  move.l pos2LEFT,a1
  7393.  
  7394.  move.l #tab,a2
  7395.  
  7396.  moveq #0,d0
  7397.  moveq #0,d1
  7398.  move.b vol0left,d0
  7399.  move.b vol2left,d1
  7400.  cmp.b d1,d0
  7401.  slt swappedem
  7402.  bge.s fbig0
  7403.  
  7404. ; d1 is bigger so scale d0 and use d1
  7405. ; as audiochannel volume.
  7406.  
  7407.  exg a0,a1
  7408.  asl.w #6,d0
  7409.  divs d1,d0
  7410.  lsl.w #8,d0
  7411.  adda.w d0,a2
  7412.  move.w d1,$dff0a8
  7413.  bra.s donechan0
  7414.  
  7415. fbig0:
  7416.  tst.w d0
  7417.  beq.s donechan0
  7418.  asl.w #6,d1
  7419.  divs d0,d1
  7420.  lsl.w #8,d1
  7421.  adda.w d1,a2
  7422.  move.w d0,$dff0a8
  7423.  
  7424. donechan0:
  7425.  
  7426.  move.l Aupt0,a3
  7427.  move.l a3,$dff0a0
  7428.  move.l Auback0,Aupt0
  7429.  move.l a3,Auback0
  7430.  
  7431.  move.l Auback0,a3
  7432.  
  7433.  moveq #0,d0
  7434.  moveq #0,d1
  7435.  moveq #0,d2
  7436.  moveq #0,d3
  7437.  moveq #0,d4
  7438.  moveq #0,d5
  7439.  move.w #49,d7
  7440. loop:
  7441.  move.l (a0)+,d0
  7442.  move.b (a1)+,d1
  7443.  move.b (a1)+,d2
  7444.  move.b (a1)+,d3
  7445.  move.b (a1)+,d4
  7446.  move.b (a2,d3.w),d5
  7447.  swap d5
  7448.  move.b (a2,d1.w),d5
  7449.  asl.l #8,d5
  7450.  move.b (a2,d2.w),d5
  7451.  swap d5
  7452.  move.b (a2,d4.w),d5
  7453.  add.l d5,d0
  7454.  move.l d0,(a3)+
  7455.  dbra d7,loop
  7456.  
  7457.  tst.b swappedem
  7458.  beq.s .ok23
  7459.  exg a0,a1
  7460. .ok23:
  7461.  
  7462.  cmp.l Samp0endLEFT,a0
  7463.  blt.s .notoffendsamp1
  7464.  move.l SampleList+6*8,a0
  7465.  move.l SampleList+6*8+4,Samp0endLEFT
  7466.  move.b #63,vol0left
  7467.  st LEFTCHANDATA+1
  7468.  move.w #0,LEFTCHANDATA+2
  7469. .notoffendsamp1:
  7470.  
  7471.  cmp.l Samp2endLEFT,a1
  7472.  blt.s .notoffendsamp2
  7473.  move.l #empty,a1
  7474.  move.l #emptyend,Samp2endLEFT
  7475.  move.b #0,vol2left
  7476.  st LEFTCHANDATA+1+8
  7477.  move.w #0,LEFTCHANDATA+2+8
  7478. .notoffendsamp2:
  7479.  
  7480.  move.l a0,pos0LEFT
  7481.  move.l a1,pos2LEFT
  7482.  
  7483. nochannel0:
  7484.  
  7485.  tst.b CHANNELDATA+16
  7486.  bne nochannel1
  7487.  
  7488.  
  7489.  move.l pos0RIGHT,a0
  7490.  move.l pos2RIGHT,a1
  7491.  
  7492.  move.l Aupt1,a3
  7493.  move.l a3,$dff0b0
  7494.  move.l Auback1,Aupt1
  7495.  move.l a3,Auback1
  7496.  
  7497.  move.l #tab,a2
  7498.  
  7499.  moveq #0,d0
  7500.  moveq #0,d1
  7501.  move.b vol0right,d0
  7502.  move.b vol2right,d1
  7503.  cmp.b d1,d0
  7504.  slt swappedem
  7505.  bge.s fbig1
  7506.  
  7507. ; d1 is bigger so scale d0 and use d1
  7508. ; as audiochannel volume.
  7509.  
  7510.  exg a0,a1
  7511.  asl.w #6,d0
  7512.  divs d1,d0
  7513.  lsl.w #8,d0
  7514.  adda.w d0,a2
  7515.  move.w d1,$dff0b8
  7516.  bra.s donechan1
  7517.  
  7518. fbig1:
  7519.  tst.w d0
  7520.  beq.s donechan1
  7521.  asl.w #6,d1
  7522.  divs d0,d1
  7523.  lsl.w #8,d1
  7524.  adda.w d1,a2
  7525.  move.w d0,$dff0b8
  7526.  
  7527. donechan1:
  7528.  moveq #0,d0
  7529.  moveq #0,d1
  7530.  moveq #0,d2
  7531.  moveq #0,d3
  7532.  moveq #0,d4
  7533.  moveq #0,d5
  7534.  move.w #49,d7
  7535. loop2:
  7536.  move.l (a0)+,d0
  7537.  move.b (a1)+,d1
  7538.  move.b (a1)+,d2
  7539.  move.b (a1)+,d3
  7540.  move.b (a1)+,d4
  7541.  move.b (a2,d3.w),d5
  7542.  swap d5
  7543.  move.b (a2,d1.w),d5
  7544.  asl.l #8,d5
  7545.  move.b (a2,d2.w),d5
  7546.  swap d5
  7547.  move.b (a2,d4.w),d5
  7548.  add.l d5,d0
  7549.  move.l d0,(a3)+
  7550.  dbra d7,loop2
  7551.  
  7552.  tst.b swappedem
  7553.  beq.s ok01
  7554.  exg a0,a1
  7555. ok01:
  7556.  
  7557.  cmp.l Samp0endRIGHT,a0
  7558.  blt.s .notoffendsamp1
  7559.  move.l #empty,a0
  7560.  move.l #emptyend,Samp0endRIGHT
  7561.  move.b #0,vol0right
  7562.  st RIGHTCHANDATA+1
  7563.  move.w #0,RIGHTCHANDATA+2
  7564. .notoffendsamp1:
  7565.  
  7566.  cmp.l Samp2endRIGHT,a1
  7567.  blt.s .notoffendsamp2
  7568.  move.l #empty,a1
  7569.  move.l #emptyend,Samp2endRIGHT
  7570.  move.b #0,vol2right
  7571.  st RIGHTCHANDATA+1+8
  7572.  move.w #0,RIGHTCHANDATA+2+8
  7573. .notoffendsamp2:
  7574.  
  7575.  move.l a0,pos0RIGHT
  7576.  move.l a1,pos2RIGHT
  7577.  
  7578. nochannel1:
  7579.  
  7580. ******************* Other two channels
  7581.  
  7582.  move.l pos1LEFT,a0
  7583.  move.l pos3LEFT,a1
  7584.  
  7585.  move.l #tab,a2
  7586.  
  7587.  moveq #0,d0
  7588.  moveq #0,d1
  7589.  move.b vol1left,d0
  7590.  move.b vol3left,d1
  7591.  cmp.b d1,d0
  7592.  slt swappedem
  7593.  bge.s fbig2
  7594.  
  7595. ; d1 is bigger so scale d0 and use d1
  7596. ; as audiochannel volume.
  7597.  
  7598.  exg a0,a1
  7599.  asl.w #6,d0
  7600.  divs d1,d0
  7601.  lsl.w #8,d0
  7602.  adda.w d0,a2
  7603.  move.w d1,$dff0d8
  7604.  bra.s donechan2
  7605.  
  7606. fbig2:
  7607.  tst.w d0
  7608.  beq.s donechan2
  7609.  asl.w #6,d1
  7610.  divs d0,d1
  7611.  lsl.w #8,d1
  7612.  adda.w d1,a2
  7613.  move.w d0,$dff0d8
  7614.  
  7615. donechan2:
  7616.  
  7617.  move.l Aupt2,a3
  7618.  move.l a3,$dff0d0
  7619.  move.l Auback2,Aupt2
  7620.  move.l a3,Auback2
  7621.  
  7622.  moveq #0,d0
  7623.  moveq #0,d1
  7624.  moveq #0,d2
  7625.  moveq #0,d3
  7626.  moveq #0,d4
  7627.  moveq #0,d5
  7628.  move.w #49,d7
  7629. loop3:
  7630.  move.l (a0)+,d0
  7631.  move.b (a1)+,d1
  7632.  move.b (a1)+,d2
  7633.  move.b (a1)+,d3
  7634.  move.b (a1)+,d4
  7635.  move.b (a2,d3.w),d5
  7636.  swap d5
  7637.  move.b (a2,d1.w),d5
  7638.  asl.l #8,d5
  7639.  move.b (a2,d2.w),d5
  7640.  swap d5
  7641.  move.b (a2,d4.w),d5
  7642.  add.l d5,d0
  7643.  move.l d0,(a3)+
  7644.  dbra d7,loop3
  7645.  
  7646.  tst.b swappedem
  7647.  beq.s .ok23
  7648.  exg a0,a1
  7649. .ok23:
  7650.  
  7651.  cmp.l Samp1endLEFT,a0
  7652.  blt.s .notoffendsamp3
  7653.  move.l #empty,a0
  7654.  move.l #emptyend,Samp1endLEFT
  7655.  move.b #0,vol1left
  7656.  st LEFTCHANDATA+1+4
  7657.  move.w #0,LEFTCHANDATA+2+4
  7658. .notoffendsamp3:
  7659.  
  7660.  cmp.l Samp3endLEFT,a1
  7661.  blt.s .notoffendsamp4
  7662.  move.l #empty,a1
  7663.  move.l #emptyend,Samp3endLEFT
  7664.  move.b #0,vol3left
  7665.  st LEFTCHANDATA+1+12
  7666.  move.w #0,LEFTCHANDATA+2+12
  7667. .notoffendsamp4:
  7668.  
  7669.  move.l a0,pos1LEFT
  7670.  move.l a1,pos3LEFT
  7671.  
  7672.  move.l pos1RIGHT,a0
  7673.  move.l pos3RIGHT,a1
  7674.  
  7675.  move.l Aupt3,a3
  7676.  move.l a3,$dff0c0
  7677.  move.l Auback3,Aupt3
  7678.  move.l a3,Auback3
  7679.  
  7680.  move.l #tab,a2
  7681.  
  7682.  moveq #0,d0
  7683.  moveq #0,d1
  7684.  move.b vol1right,d0
  7685.  move.b vol3right,d1
  7686.  cmp.b d1,d0
  7687.  slt.s swappedem
  7688.  bge.s fbig3
  7689.  
  7690.  exg a0,a1
  7691.  asl.w #6,d0
  7692.  divs d1,d0
  7693.  lsl.w #8,d0
  7694.  adda.w d0,a2
  7695.  move.w d1,$dff0c8
  7696.  bra.s donechan3
  7697.  
  7698. fbig3:
  7699.  tst.w d0
  7700.  beq.s donechan3
  7701.  asl.w #6,d1
  7702.  divs d0,d1
  7703.  lsl.w #8,d1
  7704.  adda.w d1,a2
  7705.  move.w d0,$dff0c8
  7706. donechan3:
  7707.  
  7708.  moveq #0,d0
  7709.  moveq #0,d1
  7710.  moveq #0,d2
  7711.  moveq #0,d3
  7712.  moveq #0,d4
  7713.  moveq #0,d5
  7714.  move.w #49,d7
  7715. loop4:
  7716.  move.l (a0)+,d0
  7717.  move.b (a1)+,d1
  7718.  move.b (a1)+,d2
  7719.  move.b (a1)+,d3
  7720.  move.b (a1)+,d4
  7721.  move.b (a2,d3.w),d5
  7722.  swap d5
  7723.  move.b (a2,d1.w),d5
  7724.  asl.l #8,d5
  7725.  move.b (a2,d2.w),d5
  7726.  swap d5
  7727.  move.b (a2,d4.w),d5
  7728.  add.l d5,d0
  7729.  move.l d0,(a3)+
  7730.  dbra d7,loop4
  7731.  
  7732.  tst.b swappedem
  7733.  beq.s .ok23
  7734.  exg a0,a1
  7735. .ok23:
  7736.  
  7737.  cmp.l Samp1endRIGHT,a0
  7738.  blt.s notoffendsamp3
  7739.  move.l #empty,a0
  7740.  move.l #emptyend,Samp1endRIGHT
  7741.  move.b #0,vol1right
  7742.  st RIGHTCHANDATA+1+4
  7743.  move.w #0,RIGHTCHANDATA+2+4
  7744. notoffendsamp3:
  7745.  
  7746.  cmp.l Samp3endRIGHT,a1
  7747.  blt.s notoffendsamp4
  7748.  move.l #empty,a1
  7749.  move.l #emptyend,Samp3endRIGHT
  7750.  move.b #0,vol3right
  7751.  st RIGHTCHANDATA+1+12
  7752.  move.w #0,RIGHTCHANDATA+2+12
  7753. notoffendsamp4:
  7754.  
  7755.  move.l a0,pos1RIGHT
  7756.  move.l a1,pos3RIGHT
  7757.  
  7758.  movem.l (a7)+,d0-d7/a0-a6
  7759.  tst.b counting
  7760.  beq .nostartcounter
  7761.  JSR STARTCOUNT
  7762. .nostartcounter:
  7763.  
  7764.  moveq #0,d0
  7765.  rts
  7766.  
  7767. ***********************************
  7768. * 4 channel sound routine
  7769. ***********************************
  7770.  
  7771. fourchannel:
  7772.  
  7773.  move.l #$dff000,a6
  7774.  
  7775.  btst #7,intreqrl(a6)
  7776.  beq.s nofinish0
  7777. ; move.w #0,LEFTCHANDATA+2
  7778. ; st LEFTCHANDATA+1
  7779.  move.l #null,$a0(a6)
  7780.  move.w #100,$a4(a6) 
  7781.  move.w #$0080,intreq(a6)
  7782. nofinish0:
  7783.  
  7784.  tst.b NoiseMade0pLEFT
  7785.  beq.s NoChan0sound
  7786.  
  7787.  move.l Samp0endLEFT,d0
  7788.  move.l pos0LEFT,d1
  7789.  sub.l d1,d0
  7790.  lsr.l #1,d0
  7791.  move.w d0,$a4(a6)
  7792.  move.l d1,$a0(a6)
  7793.  move.w #$8201,dmacon(a6)
  7794.  moveq #0,d0
  7795.  move.b vol0left,d0
  7796.  move.w d0,$a8(a6)
  7797.  
  7798. NoChan0sound:
  7799.  
  7800. *****************************************
  7801. *****************************************
  7802.  
  7803.  btst #0,intreqr(a6)
  7804.  beq.s nofinish1
  7805.  move.l #null,$b0(a6)
  7806.  move.w #100,$b4(a6)
  7807.  move.w #$0100,intreq(a6)
  7808. nofinish1:
  7809.  
  7810.  tst.b NoiseMade0pRIGHT
  7811.  beq.s NoChan1sound
  7812.  
  7813.  move.l Samp0endRIGHT,d0
  7814.  move.l pos0RIGHT,d1
  7815.  sub.l d1,d0
  7816.  lsr.l #1,d0
  7817.  move.w d0,$b4(a6)
  7818.  move.l d1,$b0(a6)
  7819.  move.w d0,playnull1
  7820.  move.w #$8202,dmacon(a6)
  7821.  moveq #0,d0
  7822.  move.b vol0right,d0
  7823.  move.w d0,$b8(a6)
  7824.  
  7825. NoChan1sound:
  7826.  
  7827. *****************************************
  7828. *****************************************
  7829.  
  7830.  btst #1,intreqr(a6)
  7831.  beq.s nofinish2
  7832.  move.l #null,$c0(a6)
  7833.  move.w #100,$c4(a6)
  7834.  move.w #$0200,intreq(a6)
  7835. nofinish2:
  7836.  
  7837.  tst.b NoiseMade1pRIGHT
  7838.  beq.s NoChan2sound
  7839.  
  7840.  move.l Samp1endRIGHT,d0
  7841.  move.l pos1RIGHT,d1
  7842.  sub.l d1,d0
  7843.  lsr.l #1,d0
  7844.  move.w d0,$c4(a6)
  7845.  move.w d0,playnull2
  7846.  
  7847.  move.l d1,$c0(a6)
  7848.  move.w #$8204,dmacon(a6)
  7849.  moveq #0,d0
  7850.  move.b vol1right,d0
  7851.  move.w d0,$c8(a6)
  7852.  
  7853. NoChan2sound:
  7854.  
  7855. *****************************************
  7856. *****************************************
  7857.  
  7858.  btst #2,intreqr(a6)
  7859.  beq.s nofinish3
  7860.  move.l #null,$d0(a6)
  7861.  move.w #100,$d4(a6)
  7862.  move.w #$0400,intreq(a6)
  7863. nofinish3:
  7864.  
  7865.  tst.b NoiseMade1pLEFT
  7866.  beq.s NoChan3sound
  7867.  
  7868.  move.l Samp1endLEFT,d0
  7869.  move.l pos1LEFT,d1
  7870.  sub.l d1,d0
  7871.  lsr.l #1,d0
  7872.  move.w d0,$d4(a6)
  7873.  move.w d0,playnull3
  7874.  move.l d1,$d0(a6)
  7875.  move.w #$8208,dmacon(a6)
  7876.  moveq #0,d0
  7877.  move.b vol1left,d0
  7878.  move.w d0,$d8(a6)
  7879.  
  7880. NoChan3sound:
  7881.  
  7882. nomorechannels:
  7883.  
  7884.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  7885.  move.l #0,NoiseMade0LEFT
  7886.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  7887.  move.l #0,NoiseMade0RIGHT
  7888.  
  7889. ; tst.b playnull0
  7890. ; beq.s .nnul
  7891. ; sub.b #1,playnull0
  7892. ; bra.s chan0still
  7893. ;.nnul:
  7894. ;chan0still:
  7895.  
  7896.  tst.b NoiseMade0pLEFT
  7897.  bne.s chan0still
  7898.  tst.w playnull0
  7899.  beq.s nnul0
  7900.  sub.w #100,playnull0
  7901.  bra.s chan0still
  7902. nnul0:
  7903.  move.w #0,LEFTCHANDATA+2
  7904.  st LEFTCHANDATA+1
  7905. chan0still:
  7906.  
  7907.  tst.b NoiseMade0pRIGHT
  7908.  bne.s chan1still
  7909.  tst.w playnull1
  7910.  beq.s nnul1
  7911.  sub.w #100,playnull1
  7912.  bra.s chan1still
  7913. nnul1:
  7914.  move.w #0,RIGHTCHANDATA+2
  7915.  st RIGHTCHANDATA+1
  7916. chan1still:
  7917.  
  7918.  tst.b NoiseMade1pRIGHT
  7919.  bne.s chan2still
  7920.  tst.w playnull2
  7921.  beq.s nnul2
  7922.  sub.w #100,playnull2
  7923.  bra.s chan2still
  7924. nnul2:
  7925.  move.w #0,RIGHTCHANDATA+2+4
  7926.  st RIGHTCHANDATA+1+4
  7927. chan2still:
  7928.  
  7929.  tst.b NoiseMade1pLEFT
  7930.  bne.s chan3still
  7931.  tst.w playnull3
  7932.  beq.s nnul3
  7933.  sub.w #100,playnull3
  7934.  bra.s chan3still
  7935. nnul3:
  7936.  move.w #0,LEFTCHANDATA+2+4
  7937.  st LEFTCHANDATA+1+4
  7938.  
  7939. chan3still:
  7940.  
  7941.  
  7942.  movem.l (a7)+,d0-d7/a0-a6
  7943.  
  7944.  moveq #0,d0
  7945.  rts
  7946.  
  7947. backbeat: dc.w 0
  7948.  
  7949. playnull0: dc.w 0
  7950. playnull1: dc.w 0
  7951. playnull2: dc.w 0
  7952. playnull3: dc.w 0
  7953.  
  7954. Samp0endRIGHT: dc.l emptyend
  7955. Samp1endRIGHT: dc.l emptyend
  7956. Samp2endRIGHT: dc.l emptyend
  7957. Samp3endRIGHT: dc.l emptyend
  7958. Samp0endLEFT: dc.l emptyend
  7959. Samp1endLEFT: dc.l emptyend
  7960. Samp2endLEFT: dc.l emptyend
  7961. Samp3endLEFT: dc.l emptyend
  7962.  
  7963. Aupt0: dc.l null
  7964. Auback0: dc.l null+500
  7965. Aupt2: dc.l null3
  7966. Auback2: dc.l null3+500
  7967. Aupt3: dc.l null4
  7968. Auback3: dc.l null4+500
  7969. Aupt1: dc.l null2
  7970. Auback1: dc.l null2+500
  7971.  
  7972. NoiseMade0LEFT: dc.b 0
  7973. NoiseMade1LEFT: dc.b 0
  7974. NoiseMade2LEFT: dc.b 0
  7975. NoiseMade3LEFT: dc.b 0
  7976. NoiseMade0pLEFT: dc.b 0
  7977. NoiseMade1pLEFT: dc.b 0
  7978. NoiseMade2pLEFT: dc.b 0
  7979. NoiseMade3pLEFT: dc.b 0
  7980. NoiseMade0RIGHT: dc.b 0
  7981. NoiseMade1RIGHT: dc.b 0
  7982. NoiseMade2RIGHT: dc.b 0
  7983. NoiseMade3RIGHT: dc.b 0
  7984. NoiseMade0pRIGHT: dc.b 0
  7985. NoiseMade1pRIGHT: dc.b 0
  7986. NoiseMade2pRIGHT: dc.b 0
  7987. NoiseMade3pRIGHT: dc.b 0
  7988.  
  7989. empty: ds.l 100
  7990. emptyend:
  7991.  
  7992. **************************************
  7993. * I want a routine to calculate all the
  7994. * info needed for the sound player to
  7995. * work, given say position of noise, volume
  7996. * and sample number.
  7997.  
  7998. Samplenum: dc.w 0
  7999. Noisex: dc.w 0
  8000. Noisez: dc.w 0
  8001. Noisevol: dc.w 0
  8002. chanpick: dc.w 0
  8003. IDNUM: dc.w 0
  8004. needleft: dc.b 0
  8005. needright: dc.b 0
  8006. STEREO: dc.b $0
  8007. even
  8008. prot6: dc.w 0
  8009.  
  8010.  even
  8011.  
  8012. CHANNELDATA:
  8013. LEFTCHANDATA:
  8014.  dc.l $00000000
  8015.  dc.l $00000000
  8016.  dc.l $FF000000
  8017.  dc.l $FF000000
  8018. RIGHTCHANDATA:
  8019.  dc.l $00000000
  8020.  dc.l $00000000
  8021.  dc.l $FF000000
  8022.  dc.l $FF000000
  8023.  
  8024. RIGHTPLAYEDTAB: ds.l 20
  8025. LEFTPLAYEDTAB: ds.l 20
  8026.  
  8027. MakeSomeNoise:
  8028.  
  8029. ; Plan for new sound handler:
  8030. ; It is sent a sample number,
  8031. ; a position relative to the
  8032. ; player, an id number and a volume.
  8033. ; Also notifplaying.
  8034.  
  8035. ; indirect inputs are the available
  8036. ; channel flags and whether or not
  8037. ; stereo sound is selected.
  8038.  
  8039. ; the algorithm must decide
  8040. ; whether the new sound is more
  8041. ; important than the ones already
  8042. ; playing. Thus an 'importance'
  8043. ; must be calculated, probably
  8044. ; using volume.
  8045.  
  8046. ; The output needs to be:
  8047.  
  8048. ; Write the pointers and volumes of
  8049. ; the sound channels
  8050.  
  8051.  
  8052.  tst.b notifplaying
  8053.  beq.s dontworry
  8054.  
  8055. ; find if we are already playing
  8056.  
  8057.  move.b IDNUM,d0
  8058.  move.w #7,d1
  8059.  lea CHANNELDATA,a3
  8060. findsameasme
  8061.  tst.b (a3)
  8062.  bne.s notavail
  8063.  cmp.b 1(a3),d0
  8064.  beq SameAsMe
  8065. notavail:
  8066.  add.w #4,a3
  8067.  dbra d1,findsameasme
  8068.  bra dontworry
  8069. SameAsMe
  8070.  rts
  8071.  
  8072. noiseloud: dc.w 0
  8073.  
  8074. dontworry:
  8075.  
  8076. ; Ok its fine for us to play a sound.
  8077. ; So calculate left/right volume.
  8078.  
  8079.  move.w Noisex,d1
  8080.  muls d1,d1
  8081.  move.w Noisez,d2
  8082.  muls d2,d2
  8083.  move.w #64,d3
  8084.  move.w #32767,noiseloud
  8085.  moveq #1,d0
  8086.  add.l d1,d2
  8087.  beq pastcalc
  8088.  
  8089.  move.w #31,d0
  8090. .findhigh
  8091.  btst d0,d2
  8092.  bne .foundhigh
  8093.  dbra d0,.findhigh
  8094. .foundhigh
  8095.  asr.w #1,d0
  8096.  clr.l d3
  8097.  bset d0,d3
  8098.  move.l d3,d0
  8099.  
  8100.  move.w d0,d3
  8101.  muls d3,d3    ; x*x
  8102.  sub.l d2,d3    ; x*x-a
  8103.  asr.l #1,d3    ; (x*x-a)/2
  8104.  divs d0,d3    ; (x*x-a)/2x
  8105.  sub.w d3,d0    ; second approx
  8106.  bgt .stillnot0
  8107.  move.w #1,d0
  8108. .stillnot0
  8109.  
  8110.  move.w d0,d3
  8111.  muls d3,d3
  8112.  sub.l d2,d3
  8113.  asr.l #1,d3
  8114.  divs d0,d3
  8115.  sub.w d3,d0    ; second approx
  8116.  bgt .stillnot02
  8117.  move.w #1,d0
  8118. .stillnot02
  8119.  
  8120.  move.w Noisevol,d3
  8121.  ext.l d3
  8122.  asl.l #6,d3
  8123.  cmp.l #32767,d3
  8124.  ble.s .nnnn
  8125.  move.l #32767,d3
  8126. .nnnn
  8127.  
  8128.  asr.w #2,d0
  8129.  addq #1,d0
  8130.  divs d0,d3
  8131.  
  8132.  move.w d3,noiseloud
  8133.  
  8134.  cmp.w #64,d3
  8135.  ble.s notooloud
  8136.  move.w #64,d3
  8137. notooloud:
  8138.  
  8139. pastcalc:
  8140.  
  8141.     ; d3 contains volume of noise.
  8142.     
  8143.  move.w d3,d4
  8144.  
  8145.  move.w d3,d2
  8146.  muls Noisex,d2
  8147.  asl.w #3,d0
  8148.  divs d0,d2
  8149.  
  8150.  bgt.s quietleft
  8151.  add.w d2,d4
  8152.  bge.s donequiet
  8153.  move.w #0,d4
  8154.  bra.s donequiet
  8155. quietleft:
  8156.  sub.w d2,d3
  8157.  bge.s donequiet
  8158.  move.w #0,d3
  8159. donequiet:
  8160.  
  8161. ; d3=leftvol?
  8162. ; d4=rightvol?
  8163.  
  8164.  clr.w needleft
  8165.  
  8166.  cmp.b d3,d4
  8167.  bgt.s RightLouder
  8168.  
  8169. ; Left is louder; is it MUCH louder?
  8170.  
  8171.  st needleft
  8172.  move.w d3,d2
  8173.  sub.w d4,d2
  8174.  cmp.w #32,d2
  8175.  slt needright
  8176.  bra aboutsame
  8177.  
  8178. RightLouder:
  8179.  st needright
  8180.  move.w d4,d2
  8181.  sub.w d3,d2
  8182.  cmp.w #32,d2
  8183.  slt needleft
  8184.  
  8185. aboutsame:
  8186.  
  8187.  tst.b STEREO
  8188.  beq NOSTEREO
  8189.  
  8190. ; Find least important sound on left
  8191.  
  8192.  move.l #0,a2
  8193.  move.l #0,d5
  8194.  move.w #32767,d2
  8195.  move.b IDNUM,d0
  8196.  lea LEFTCHANDATA,a3
  8197.  move.w #3,d1
  8198. FindLeftChannel
  8199.  tst.b (a3)
  8200.  bne.s .notactive
  8201.  cmp.b 1(a3),d0
  8202.  beq.s FOUNDLEFT
  8203.  cmp.w 2(a3),d2
  8204.  blt.s .notactive
  8205.  move.w 2(a3),d2
  8206.  move.l a3,a2
  8207.  move.w d5,d6
  8208.  
  8209. .notactive:
  8210.  add.w #4,a3
  8211.  add.w #1,d5
  8212.  dbra d1,FindLeftChannel
  8213.  move.l a2,a3
  8214.  bra.s gopastleft
  8215. FOUNDLEFT:
  8216.  move.w d5,d6
  8217. gopastleft:
  8218.  tst.l a3
  8219.  bne.s FOUNDALEFT
  8220.  rts
  8221. FOUNDALEFT:
  8222.  
  8223. ; d6 = channel number
  8224.  move.b d0,1(a3)
  8225.  move.w d3,2(a3)
  8226.  
  8227.  move.w Samplenum,d5
  8228.  move.l #SampleList,a3
  8229.  move.l (a3,d5.w*8),a1
  8230.  move.l 4(a3,d5.w*8),a2
  8231.  
  8232.  tst.b d6
  8233.  seq NoiseMade0LEFT
  8234.  beq.s .chan0
  8235.  cmp.b #2,d6
  8236.  slt NoiseMade1LEFT
  8237.  blt .chan1
  8238.  seq NoiseMade2LEFT
  8239.  beq .chan2
  8240.  st NoiseMade3LEFT
  8241.  
  8242.  move.b d5,LEFTPLAYEDTAB+9
  8243.  move.b d3,LEFTPLAYEDTAB+1+9
  8244.  move.b d4,LEFTPLAYEDTAB+2+9
  8245.  move.b d3,vol3left
  8246.  move.l a1,pos3LEFT
  8247.  move.l a2,Samp3endLEFT
  8248.  bra dorightchan
  8249.  
  8250. .chan0: 
  8251.  move.b d5,LEFTPLAYEDTAB
  8252.  move.b d3,LEFTPLAYEDTAB+1
  8253.  move.b d4,LEFTPLAYEDTAB+2
  8254.  move.l a1,pos0LEFT
  8255.  move.l a2,Samp0endLEFT
  8256.  move.b d3,vol0left
  8257.  bra dorightchan
  8258.  
  8259. .chan1:
  8260.  move.b d5,LEFTPLAYEDTAB+3
  8261.  move.b d3,LEFTPLAYEDTAB+1+3
  8262.  move.b d4,LEFTPLAYEDTAB+2+3
  8263.  move.b d3,vol1left
  8264.  move.l a1,pos1LEFT
  8265.  move.l a2,Samp1endLEFT
  8266.  bra dorightchan
  8267.  
  8268. .chan2: 
  8269.  move.b d5,LEFTPLAYEDTAB+6
  8270.  move.b d3,LEFTPLAYEDTAB+1+6
  8271.  move.b d4,LEFTPLAYEDTAB+2+6
  8272.  move.l a1,pos2LEFT
  8273.  move.l a2,Samp2endLEFT
  8274.  move.b d3,vol2left
  8275.  
  8276. dorightchan:
  8277.  
  8278. ; Find least important sound on right
  8279.  
  8280.  move.l #0,a2
  8281.  move.l #0,d5
  8282.  move.w #10000,d2
  8283.  move.b IDNUM,d0
  8284.  lea RIGHTCHANDATA,a3
  8285.  move.w #3,d1
  8286. FindRightChannel
  8287.  tst.b (a3)
  8288.  bne.s .notactive
  8289.  cmp.b 1(a3),d0
  8290.  beq.s FOUNDRIGHT
  8291.  cmp.w 2(a3),d2
  8292.  blt.s .notactive
  8293.  move.w 2(a3),d2
  8294.  move.l a3,a2
  8295.  move.w d5,d6
  8296.  
  8297. .notactive:
  8298.  add.w #4,a3
  8299.  add.w #1,d5
  8300.  dbra d1,FindRightChannel
  8301.  move.l a2,a3
  8302.  bra.s gopastright
  8303. FOUNDRIGHT:
  8304.  move.w d5,d6
  8305. gopastright:
  8306.  tst.l a3
  8307.  bne.s FOUNDARIGHT
  8308.  rts
  8309. FOUNDARIGHT:
  8310.  
  8311. ; d6 = channel number
  8312.  move.b d0,1(a3)
  8313.  move.w d3,2(a3)
  8314.  
  8315.  move.w Samplenum,d5
  8316.  move.l #SampleList,a3
  8317.  move.l (a3,d5.w*8),a1
  8318.  move.l 4(a3,d5.w*8),a2
  8319.  
  8320.  tst.b d6
  8321.  seq NoiseMade0RIGHT
  8322.  beq.s .chan0
  8323.  cmp.b #2,d6
  8324.  slt NoiseMade1RIGHT
  8325.  blt .chan1
  8326.  seq NoiseMade2RIGHT
  8327.  beq .chan2
  8328.  st NoiseMade3RIGHT
  8329.  
  8330.  move.b d5,RIGHTPLAYEDTAB+9
  8331.  move.b d3,RIGHTPLAYEDTAB+1+9
  8332.  move.b d4,RIGHTPLAYEDTAB+2+9
  8333.  move.b d4,vol3right
  8334.  move.l a1,pos3RIGHT
  8335.  move.l a2,Samp3endRIGHT
  8336.  rts
  8337.  
  8338. .chan0: 
  8339.  move.b d5,RIGHTPLAYEDTAB
  8340.  move.b d3,RIGHTPLAYEDTAB+1
  8341.  move.b d4,RIGHTPLAYEDTAB+2
  8342.  move.l a1,pos0RIGHT
  8343.  move.l a2,Samp0endRIGHT
  8344.  move.b d4,vol0right
  8345.  rts
  8346.  
  8347. .chan1:
  8348.  move.b d5,RIGHTPLAYEDTAB+3
  8349.  move.b d3,RIGHTPLAYEDTAB+1+3
  8350.  move.b d4,RIGHTPLAYEDTAB+2+3
  8351.  move.b d3,vol1right
  8352.  move.l a1,pos1RIGHT
  8353.  move.l a2,Samp1endRIGHT
  8354.  rts
  8355.  
  8356. .chan2: 
  8357.  move.b d5,RIGHTPLAYEDTAB+6
  8358.  move.b d3,RIGHTPLAYEDTAB+1+6
  8359.  move.b d4,RIGHTPLAYEDTAB+2+6
  8360.  move.l a1,pos2RIGHT
  8361.  move.l a2,Samp2endRIGHT
  8362.  move.b d3,vol2right
  8363.  rts
  8364.  
  8365. NOSTEREO:
  8366.  move.l #0,a2
  8367.  move.l #-1,d5
  8368.  move.w #32767,d2
  8369.  move.b IDNUM,d0
  8370.  lea CHANNELDATA,a3
  8371.  move.w #7,d1
  8372. FindChannel
  8373.  tst.b (a3)
  8374.  bne.s .notactive
  8375.  cmp.b 1(a3),d0
  8376.  beq.s FOUNDCHAN
  8377.  cmp.w 2(a3),d2
  8378.  blt.s .notactive
  8379.  move.w 2(a3),d2
  8380.  move.l a3,a2
  8381.  move.w d5,d6
  8382.  add.w #1,d6
  8383.  
  8384. .notactive:
  8385.  add.w #4,a3
  8386.  add.w #1,d5
  8387.  dbra d1,FindChannel
  8388.  
  8389.  move.l a2,a3
  8390.  bra.s gopastchan
  8391. FOUNDCHAN:
  8392.  move.w d5,d6
  8393.  add.w #1,d6
  8394. gopastchan:
  8395.  tst.w d6
  8396.  bge.s FOUNDACHAN
  8397. tooquiet:
  8398.  rts
  8399. FOUNDACHAN:
  8400.  
  8401. ; d6 = channel number
  8402.  
  8403.  cmp.w noiseloud,d2
  8404.  bgt.s tooquiet
  8405.  
  8406.  move.b d0,1(a3)
  8407.  move.w noiseloud,2(a3)
  8408.  
  8409.  move.w Samplenum,d5
  8410.  move.l #SampleList,a3
  8411.  move.l (a3,d5.w*8),a1
  8412.  move.l 4(a3,d5.w*8),a2
  8413.  
  8414.  tst.b d6
  8415.  beq .chan0
  8416.  cmp.b #2,d6
  8417.  blt .chan1
  8418.  beq .chan2
  8419.  cmp.b #4,d6
  8420.  blt .chan3
  8421.  beq .chan4
  8422.  cmp.b #6,d6
  8423.  blt .chan5
  8424.  beq .chan6
  8425.  st NoiseMade3RIGHT
  8426.  
  8427.  move.b d5,RIGHTPLAYEDTAB+9
  8428.  move.b d3,RIGHTPLAYEDTAB+1+9
  8429.  move.b d4,RIGHTPLAYEDTAB+2+9
  8430.  move.b d4,vol3right
  8431.  move.l a1,pos3RIGHT
  8432.  move.l a2,Samp3endRIGHT
  8433.  rts
  8434.  
  8435. .chan3:
  8436.  st NoiseMade3LEFT
  8437.  move.b d5,LEFTPLAYEDTAB+9
  8438.  move.b d3,LEFTPLAYEDTAB+1+9
  8439.  move.b d4,LEFTPLAYEDTAB+2+9
  8440.  move.b d3,vol3left
  8441.  move.l a1,pos3LEFT
  8442.  move.l a2,Samp3endLEFT
  8443.  bra dorightchan
  8444.  
  8445. .chan0: 
  8446.  st NoiseMade0LEFT
  8447.  move.b d5,LEFTPLAYEDTAB
  8448.  move.b d3,LEFTPLAYEDTAB+1
  8449.  move.b d4,LEFTPLAYEDTAB+2
  8450.  move.l a1,pos0LEFT
  8451.  move.l a2,Samp0endLEFT
  8452.  move.b d3,vol0left
  8453.  rts
  8454.  
  8455. .chan1:
  8456.  st NoiseMade1LEFT
  8457.  move.b d5,LEFTPLAYEDTAB+3
  8458.  move.b d3,LEFTPLAYEDTAB+1+3
  8459.  move.b d4,LEFTPLAYEDTAB+2+3
  8460.  move.b d3,vol1left
  8461.  move.l a1,pos1LEFT
  8462.  move.l a2,Samp1endLEFT
  8463.  rts
  8464.  
  8465. .chan2: 
  8466.  st NoiseMade2LEFT
  8467.  move.b d5,LEFTPLAYEDTAB+6
  8468.  move.b d3,LEFTPLAYEDTAB+1+6
  8469.  move.b d4,LEFTPLAYEDTAB+2+6
  8470.  move.l a1,pos2LEFT
  8471.  move.l a2,Samp2endLEFT
  8472.  move.b d3,vol2left
  8473.  rts
  8474.  
  8475. .chan4: 
  8476.  st NoiseMade0RIGHT
  8477.  move.b d5,RIGHTPLAYEDTAB
  8478.  move.b d3,RIGHTPLAYEDTAB+1
  8479.  move.b d4,RIGHTPLAYEDTAB+2
  8480.  move.l a1,pos0RIGHT
  8481.  move.l a2,Samp0endRIGHT
  8482.  move.b d4,vol0right
  8483.  rts
  8484.  
  8485. .chan5:
  8486.  st NoiseMade1RIGHT
  8487.  move.b d5,RIGHTPLAYEDTAB+3
  8488.  move.b d3,RIGHTPLAYEDTAB+1+3
  8489.  move.b d4,RIGHTPLAYEDTAB+2+3
  8490.  move.b d3,vol1right
  8491.  move.l a1,pos1RIGHT
  8492.  move.l a2,Samp1endRIGHT
  8493.  rts
  8494.  
  8495. .chan6: 
  8496.  st NoiseMade2RIGHT
  8497.  move.b d5,RIGHTPLAYEDTAB+6
  8498.  move.b d3,RIGHTPLAYEDTAB+1+6
  8499.  move.b d4,RIGHTPLAYEDTAB+2+6
  8500.  move.l a1,pos2RIGHT
  8501.  move.l a2,Samp2endRIGHT
  8502.  move.b d3,vol2right
  8503.  rts
  8504.  
  8505. SampleList:
  8506.  dc.l Scream,EndScream
  8507.  dc.l Shoot,EndShoot
  8508.  dc.l Munch,EndMunch
  8509.  dc.l PooGun,EndPooGun
  8510.  dc.l Collect,EndCollect
  8511. ;5
  8512.  dc.l DoorNoise,EndDoorNoise
  8513.  dc.l 0,0
  8514.  dc.l Stomp,EndStomp
  8515.  dc.l LowScream,EndLowScream
  8516.  dc.l BaddieGun,EndBaddieGun
  8517. ;10
  8518.  dc.l SwitchNoise,EndSwitch
  8519.  dc.l Reload,EndReload
  8520.  dc.l NoAmmo,EndNoAmmo
  8521.  dc.l Splotch,EndSplotch
  8522.  dc.l SplatPop,EndSplatPop
  8523. ;15
  8524.  dc.l Boom,EndBoom
  8525.  dc.l Hiss,EndHiss
  8526.  dc.l Howl1,EndHowl1
  8527.  dc.l Howl2,EndHowl2
  8528.  dc.l Pant,EndPant
  8529. ;20
  8530.  dc.l Whoosh,EndWhoosh
  8531.  dc.l ROAR,EndROAR
  8532.  dc.l whoosh,Endwhoosh
  8533.  dc.l 0,0
  8534.  dc.l 0,0
  8535.  dc.l 0,0
  8536.  dc.l 0,0
  8537.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8538.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8539.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8540.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8541.  
  8542.  dc.l 0
  8543.  
  8544. storeval: dc.w 0
  8545.  
  8546.  include "ab3:source/wallchunk.s"
  8547.  include "ab3:source/loadfromdisk.s"
  8548.  include "ab3:source/screensetup.s"
  8549.  include "ab3:source/CONTROLLOOP.s"
  8550.  
  8551.  
  8552.  
  8553.  
  8554. saveinters:  
  8555.  dc.w 0
  8556.  
  8557. z: dc.w 10
  8558.  
  8559. notifplaying:
  8560.  dc.w 0
  8561.  
  8562. audpos1: dc.w 0
  8563. audpos1b: dc.w 0
  8564. audpos2: dc.w 0
  8565. audpos2b: dc.w 0
  8566. audpos3: dc.w 0
  8567. audpos3b: dc.w 0
  8568. audpos4: dc.w 0
  8569. audpos4b: dc.w 0
  8570.  
  8571. vol0left: dc.w 0
  8572. vol0right: dc.w 0
  8573. vol1left: dc.w 0
  8574. vol1right: dc.w 0
  8575. vol2left: dc.w 0
  8576. vol2right: dc.w 0
  8577. vol3left: dc.w 0
  8578. vol3right: dc.w 0
  8579.  
  8580. pos: dc.l 0
  8581.  
  8582. pos0LEFT: dc.l empty
  8583. pos1LEFT: dc.l empty
  8584. pos2LEFT: dc.l empty
  8585. pos3LEFT: dc.l empty
  8586. pos0RIGHT: dc.l empty
  8587. pos1RIGHT: dc.l empty
  8588. pos2RIGHT: dc.l empty
  8589. pos3RIGHT: dc.l empty
  8590.  
  8591. numtodo dc.w 0
  8592.  
  8593. npt: dc.w 0
  8594.  
  8595. pretab:
  8596. val SET 0
  8597.  REPT 128
  8598.  dc.b val
  8599. val SET val+1
  8600.  ENDR
  8601. val SET -128
  8602.  REPT 128
  8603.  dc.b val
  8604. val SET val+1
  8605.  ENDR 
  8606.  
  8607. tab:
  8608.  ds.b 256*65
  8609.  
  8610.  
  8611. test: dc.l 0
  8612.  ds.l 30
  8613.  
  8614.  even
  8615. ConstCols:
  8616. ; incbin "ConstCols"
  8617.  even
  8618. Smoothscalecols:
  8619. ; incbin "smoothbumppalscaled"
  8620.  even
  8621. SmoothTile:
  8622. ; incbin "smoothbumptile"
  8623.  even
  8624. Bumpscalecols:
  8625. ; incbin "Bumppalscaled"
  8626.  even
  8627. Bumptile:
  8628. ; incbin "bumptile"
  8629.  even
  8630. scalecols: ;incbin "bytepixpalscaled"
  8631.  even
  8632. floorscalecols:
  8633.  incbin "floorpalscaled"
  8634.  ds.w 256*4
  8635.  
  8636.  even
  8637. PaletteAddr: dc.l 0
  8638. ChunkAddr: dc.l 0
  8639. ;walltiles:
  8640. ; dc.l GreenMechanicWALL
  8641. ; dc.l BlueGreyMetalWALL
  8642. ; dc.l TechnoDetailWALL
  8643. ; dc.l BlueStoneWALL
  8644. ; dc.l RedAlertWALL
  8645. ; dc.l RockWALL
  8646. ;
  8647. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8648. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8649. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8650. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8651. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8652. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8653.  
  8654. floortile:
  8655.  dc.l 0
  8656. ; incbin "floortile" 
  8657.  even
  8658. wallrouts:
  8659. ; incbin "2x2WallDraw" 
  8660.  CNOP 0,64
  8661. BackPicture:
  8662.  incbin "backfile"
  8663. EndBackPicture:
  8664.  
  8665. drawpt: dc.l 0
  8666. olddrawpt: dc.l 0
  8667. frompt: dc.l 0 
  8668.  
  8669. SineTable:
  8670.  incbin "bigsine"
  8671.  
  8672. angspd: dc.w 0
  8673. flooryoff: dc.w 0
  8674. xoff: dc.l 0
  8675. yoff: dc.l 0
  8676. yvel: dc.l 0
  8677. zoff: dc.l 0
  8678. tyoff: dc.l 0
  8679. xspdval: dc.l 0
  8680. zspdval: dc.l 0
  8681. Zone: dc.w 0
  8682.  
  8683. PLR1: dc.b $ff
  8684.  even
  8685. PLR1_energy: dc.w 191
  8686. PLR1_GunSelected: dc.w 0
  8687. PLR1_cosval: dc.w 0
  8688. PLR1_sinval: dc.w 0
  8689. PLR1_angpos: dc.w 0
  8690. PLR1_angspd: dc.w 0
  8691. PLR1_xoff: dc.l 0
  8692. PLR1_yoff: dc.l 0
  8693. PLR1_yvel: dc.l 0
  8694. PLR1_zoff: dc.l 0
  8695. PLR1_tyoff: dc.l 0
  8696. PLR1_xspdval: dc.l 0
  8697. PLR1_zspdval: dc.l 0
  8698. PLR1_Zone: dc.w 0
  8699. PLR1_Roompt: dc.l 0
  8700. PLR1_OldRoompt: dc.l 0
  8701. PLR1_PointsToRotatePtr: dc.l 0
  8702. PLR1_ListOfGraphRooms: dc.l 0
  8703. PLR1_oldxoff: dc.l 0
  8704. PLR1_oldzoff: dc.l 0
  8705. PLR1_StoodInTop: dc.b 0
  8706.  even
  8707. PLR1_height: dc.l 0
  8708.  
  8709.  ds.w 4
  8710.  
  8711. OLDX1: dc.l 0
  8712. OLDX2: dc.l 0
  8713. OLDZ1: dc.l 0
  8714. OLDZ2: dc.l 0
  8715.  
  8716. XDIFF1: dc.l 0
  8717. ZDIFF1: dc.l 0
  8718. XDIFF2: dc.l 0
  8719. ZDIFF2: dc.l 0
  8720.  
  8721. PLR1s_cosval: dc.w 0
  8722. PLR1s_sinval: dc.w 0
  8723. PLR1s_angpos: dc.w 0
  8724. PLR1s_angspd: dc.w 0
  8725. PLR1s_xoff: dc.l 0
  8726. PLR1s_yoff: dc.l 0
  8727. PLR1s_yvel: dc.l 0
  8728. PLR1s_zoff: dc.l 0
  8729. PLR1s_tyoff: dc.l 0
  8730. PLR1s_xspdval: dc.l 0
  8731. PLR1s_zspdval: dc.l 0
  8732. PLR1s_Zone: dc.w 0
  8733. PLR1s_Roompt: dc.l 0
  8734. PLR1s_OldRoompt: dc.l 0
  8735. PLR1s_PointsToRotatePtr: dc.l 0
  8736. PLR1s_ListOfGraphRooms: dc.l 0
  8737. PLR1s_oldxoff: dc.l 0
  8738. PLR1s_oldzoff: dc.l 0
  8739. PLR1s_height: dc.l 0
  8740. PLR1s_targheight: dc.l 0
  8741.  
  8742. p1_xoff: dc.l 0
  8743. p1_zoff: dc.l 0
  8744. p1_yoff: dc.l 0
  8745. p1_height: dc.l 0
  8746. p1_angpos: dc.w 0
  8747. p1_bobble: dc.w 0
  8748. p1_clicked: dc.b 0
  8749. p1_spctap: dc.b 0
  8750. p1_ducked: dc.b 0
  8751. p1_gunselected: dc.b 0
  8752. p1_fire: dc.b 0
  8753.  even
  8754. p1_holddown: dc.w 0
  8755.  
  8756.  ds.w 4
  8757.  
  8758. PLR2: dc.b $ff
  8759.  even
  8760. PLR2_GunSelected: dc.w 0
  8761. PLR2_energy: dc.w 191
  8762. PLR2_cosval: dc.w 0
  8763. PLR2_sinval: dc.w 0
  8764. PLR2_angpos: dc.w 0
  8765. PLR2_angspd: dc.w 0
  8766. PLR2_xoff: dc.l 0
  8767. PLR2_yoff: dc.l 0
  8768. PLR2_yvel: dc.l 0
  8769. PLR2_zoff: dc.l 0
  8770. PLR2_tyoff: dc.l 0
  8771. PLR2_xspdval: dc.l 0
  8772. PLR2_zspdval: dc.l 0
  8773. PLR2_Zone: dc.w 0
  8774. PLR2_Roompt: dc.l 0
  8775. PLR2_OldRoompt: dc.l 0
  8776. PLR2_PointsToRotatePtr: dc.l 0
  8777. PLR2_ListOfGraphRooms: dc.l 0
  8778. PLR2_oldxoff: dc.l 0
  8779. PLR2_oldzoff: dc.l 0
  8780. PLR2_StoodInTop: dc.b 0
  8781.  even
  8782. PLR2_height: dc.l 0
  8783.  
  8784.  ds.w 4
  8785.  
  8786. PLR2s_cosval: dc.w 0
  8787. PLR2s_sinval: dc.w 0
  8788. PLR2s_angpos: dc.w 0
  8789. PLR2s_angspd: dc.w 0
  8790. PLR2s_xoff: dc.l 0
  8791. PLR2s_yoff: dc.l 0
  8792. PLR2s_yvel: dc.l 0
  8793. PLR2s_zoff: dc.l 0
  8794. PLR2s_tyoff: dc.l 0
  8795. PLR2s_xspdval: dc.l 0
  8796. PLR2s_zspdval: dc.l 0
  8797. PLR2s_Zone: dc.w 0
  8798. PLR2s_Roompt: dc.l 0
  8799. PLR2s_OldRoompt: dc.l 0
  8800. PLR2s_PointsToRotatePtr: dc.l 0
  8801. PLR2s_ListOfGraphRooms: dc.l 0
  8802. PLR2s_oldxoff: dc.l 0
  8803. PLR2s_oldzoff: dc.l 0
  8804. PLR2s_height: dc.l 0
  8805. PLR2s_targheight: dc.l 0
  8806.  
  8807.  ds.w 4
  8808.  
  8809. p2_xoff: dc.l 0
  8810. p2_zoff: dc.l 0
  8811. p2_yoff: dc.l 0
  8812. p2_height: dc.l 0
  8813. p2_angpos: dc.w 0
  8814. p2_bobble: dc.w 0
  8815. p2_clicked: dc.b 0
  8816. p2_spctap: dc.b 0
  8817. p2_ducked: dc.b 0
  8818. p2_gunselected: dc.b 0
  8819. p2_fire: dc.b 0
  8820.  even
  8821. p2_holddown: dc.w 0
  8822.  
  8823.  
  8824. liftanimtab:
  8825.  
  8826.  
  8827. endliftanimtab:
  8828.  
  8829. glassball:
  8830. ; incbin "glassball.inc"
  8831. endglass
  8832. glassballpt: dc.l glassball
  8833.  
  8834. rndtab: ; incbin "randfile"
  8835. endrnd: 
  8836.  
  8837. brightanimtab:
  8838.  dcb.w 200,20
  8839.  dc.w 5
  8840.  dc.w 10,20
  8841.  dc.w 5
  8842.  dcb.w 30,20
  8843.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  8844.  dcb.w 40,0
  8845.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  8846.  dcb.w 300,0
  8847.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  8848.  dc.w -1
  8849.  
  8850. Roompt: dc.l 0
  8851. OldRoompt: dc.l 0
  8852.  
  8853. *****************************************************************
  8854.  *
  8855.  include "AB3:source/LevelData2"
  8856.  *
  8857. *****************************************************************
  8858.  
  8859.  
  8860. wallpt: dc.l 0
  8861. floorpt: dc.l 0
  8862.  
  8863. Rotated:
  8864.  ds.l 2*800 
  8865. ObjRotated:
  8866.  ds.l 2*500
  8867.  
  8868. OnScreen:
  8869.  ds.l 2*800 
  8870.  
  8871. startwait: dc.w 0
  8872. endwait: dc.w 0
  8873.  
  8874. Faces:; incbin "faces2raw"
  8875.  
  8876. *******************************************************************
  8877.  
  8878. consttab:
  8879.  incbin "constantfile"
  8880.  
  8881. *******************************************************************
  8882.  
  8883.  
  8884.  
  8885. *********************************
  8886.  
  8887. ; include "ab3:source/loadmod.a"
  8888. ; include "ab3:source/proplayer.a"
  8889.  
  8890.  
  8891. darkentab: incbin "darkenedcols"
  8892. brightentab: incbin "brightenfile"
  8893. WorkSpace:
  8894.  ds.l 8192 
  8895. waterfile: incbin "waterfile"
  8896.  
  8897.  SECTION ffff,CODE_C
  8898.  
  8899. nullspr: dc.l 0
  8900.  
  8901.  cnop 0,8
  8902. borders:
  8903.  incbin "leftbord"
  8904.  incbin "rightbord"
  8905.  
  8906. health: incbin "healthstrip"
  8907. Ammunition: incbin "ammostrip"
  8908. healthpal: incbin "healthpal"
  8909. PanelKeys: incbin "greenkey"
  8910.  incbin "redkey"
  8911.  incbin "yellowkey"
  8912.  incbin "bluekey"
  8913.  
  8914. null: ds.w 500
  8915. null2: ds.w 500
  8916. null3: ds.w 500
  8917. null4: ds.w 500
  8918.  
  8919.  
  8920. Blurbfield:
  8921.  
  8922.  dc.w bpl1ptl
  8923. bl1l: dc.w 0
  8924.  dc.w bpl1pth
  8925. bl1h: dc.w 0
  8926.  
  8927.  dc.w diwstart,$2c81
  8928.  dc.w diwstop,$1cc1
  8929.  dc.w ddfstart,$38
  8930.  dc.w ddfstop,$b8
  8931.  dc.w bplcon0,$9201
  8932.  dc.w bplcon1,0
  8933.  dc.w $106,$c40
  8934. blcols:
  8935.  dc.w col0,0
  8936.  dc.w col1,$fff
  8937.  
  8938.  dc.w $108,0
  8939.  dc.w $10a,0
  8940.  
  8941.  dc.w $ffff,$fffe
  8942.  dc.w $ffff,$fffe
  8943.  
  8944. nullline:
  8945.  ds.b 80    
  8946.  
  8947.  include "ab3:source/titlecop.s"
  8948.  
  8949. bigfield:    
  8950.                 ; Start of our copper list.
  8951.  
  8952.  dc.w dmacon,$8020
  8953.  dc.w intreq,$8011
  8954.  dc.w $1fc,$f
  8955.  
  8956.  dc.w diwstart
  8957. winstart: dc.w $2cb1
  8958.  dc.w diwstop
  8959. winstop: dc.w $2c91
  8960.  dc.w ddfstart
  8961. fetchstart: dc.w $48
  8962.  dc.w ddfstop
  8963. fetchstop: dc.w $88
  8964.  
  8965. bordercols:
  8966.  incbin "borderpal"
  8967.  
  8968.  dc.w spr0ptl
  8969. s0l:
  8970.  dc.w 0
  8971.  dc.w spr0pth
  8972. s0h:
  8973.  dc.w 0
  8974.  dc.w spr1ptl
  8975. s1l:
  8976.  dc.w 0
  8977.  dc.w spr1pth
  8978. s1h:
  8979.  dc.w 0
  8980.  dc.w spr2ptl
  8981. s2l:
  8982.  dc.w 0
  8983.  dc.w spr2pth
  8984. s2h:
  8985.  dc.w 0
  8986.  dc.w spr3ptl
  8987. s3l:
  8988.  dc.w 0
  8989.  dc.w spr3pth
  8990. s3h:
  8991.  dc.w 0
  8992.  dc.w spr4ptl
  8993. s4l:
  8994.  dc.w 0
  8995.  dc.w spr4pth
  8996. s4h:
  8997.  dc.w 0
  8998.  dc.w spr5ptl
  8999. s5l:
  9000.  dc.w 0
  9001.  dc.w spr5pth
  9002. s5h:
  9003.  dc.w 0
  9004.  dc.w spr6ptl
  9005. s6l:
  9006.  dc.w 0
  9007.  dc.w spr6pth
  9008. s6h:
  9009.  dc.w 0
  9010.  dc.w spr7ptl
  9011. s7l:
  9012.  dc.w 0
  9013.  dc.w spr7pth
  9014. s7h:
  9015.  dc.w 0
  9016.  
  9017.  
  9018.  dc.w $106,$c42
  9019.  incbin "borderpal"
  9020.  
  9021.  dc.w $106,$8c42
  9022.  dc.w col0
  9023. hitcol: dc.w $0
  9024.  dc.w $106,$c42
  9025.  dc.w col0
  9026. hitcol2: dc.w 0
  9027.  
  9028.  dc.w bplcon0,$7201
  9029.  dc.w bplcon1
  9030. smoff:
  9031.  dc.w $0
  9032.  
  9033.  dc.w $108
  9034. modulo: dc.w -24
  9035.  dc.w $10a,-24
  9036.  
  9037.  dc.w bpl1pth
  9038. pl1h
  9039.  dc.w 0
  9040.  
  9041.  dc.w bpl1ptl
  9042. pl1l
  9043.  dc.w 0
  9044.  
  9045.  dc.w bpl2pth
  9046. pl2h
  9047.  dc.w 0
  9048.  
  9049.  dc.w bpl2ptl
  9050. pl2l
  9051.  dc.w 0
  9052.  
  9053.  dc.w bpl3pth
  9054. pl3h
  9055.  dc.w 0
  9056.  
  9057.  dc.w bpl3ptl
  9058. pl3l
  9059.  dc.w 0
  9060.  
  9061.  dc.w bpl4pth
  9062. pl4h
  9063.  dc.w 0
  9064.  
  9065.  dc.w bpl4ptl
  9066. pl4l
  9067.  dc.w 0
  9068.  
  9069.  dc.w bpl5pth
  9070. pl5h
  9071.  dc.w 0
  9072.  
  9073.  dc.w bpl5ptl
  9074. pl5l
  9075.  dc.w 0
  9076.  
  9077.  dc.w bpl6pth
  9078. pl6h
  9079.  dc.w 0
  9080.  
  9081.  dc.w bpl6ptl
  9082. pl6l
  9083.  dc.w 0
  9084.  
  9085.  dc.w bpl7pth
  9086. pl7h
  9087.  dc.w 0
  9088.  
  9089.  dc.w bpl7ptl
  9090. pl7l
  9091.  dc.w 0
  9092.  
  9093.  
  9094.  dc.w $1001,$ff00
  9095.  dc.w intreq,$11
  9096. yposcop:
  9097.  dc.w $2a11,$fffe
  9098.  dc.w $8a,0
  9099.  
  9100. ; ds.l 104*12
  9101.  
  9102. ;colbars:
  9103. ;val SET $2a
  9104. ; dcb.l 104*80,$1fe0000
  9105. ; dc.w $106,$c42
  9106. ; dc.w $80
  9107. ;pch1:
  9108. ; dc.w 0
  9109. ; dc.w $82
  9110. ;pcl1:
  9111. ; dc.w 0 
  9112. ; dc.w $88,0
  9113. ; dc.w $ffff,$fffe       ; End copper list.
  9114.  
  9115. ; ds.l 104*12
  9116.  
  9117. ;colbars2:
  9118. ;val SET $2a
  9119. ; dcb.l 104*80,$1fe0000
  9120. ; dc.w $106,$c42
  9121. ; dc.w $80
  9122. ;pch2:
  9123. ; dc.w 0
  9124. ; dc.w $82
  9125. ;pcl2:
  9126. ; dc.w 0
  9127. ; dc.w $88,0
  9128. ; dc.w $ffff,$fffe       ; End copper list.
  9129.  
  9130. ; ds.l 104*10
  9131.  
  9132. NullCopper:
  9133.  dc.w $ffff,$fffe
  9134.  
  9135. old: dc.l 0
  9136.  
  9137. prot5: dc.w 0
  9138. PanelCop:
  9139.  
  9140.  dc.w $80
  9141. och:
  9142.  dc.w 0
  9143.  dc.w $82
  9144. ocl:
  9145.  dc.w 0
  9146.  
  9147. statskip:
  9148.  dc.w $1fe,0
  9149.  dc.w $1fe,0
  9150.  
  9151.  dc.w $10c,0
  9152.  dc.w bplcon0,$1201
  9153.  dc.w bpl1ptl
  9154. n1l:
  9155.  dc.w 0
  9156.  dc.w bpl1pth
  9157. n1h:
  9158.  dc.w 0
  9159.  dc.w $108,-24
  9160.  incbin "Panelpal"
  9161.  
  9162.  dc.w bpl2pth
  9163. p2h
  9164.  dc.w 0
  9165.  
  9166.  dc.w bpl2ptl
  9167. p2l
  9168.  dc.w 0
  9169.  
  9170.  dc.w bpl3pth
  9171. p3h
  9172.  dc.w 0
  9173.  
  9174.  dc.w bpl3ptl
  9175. p3l
  9176.  dc.w 0
  9177.  
  9178.  dc.w bpl4pth
  9179. p4h
  9180.  dc.w 0
  9181.  dc.w bpl4ptl
  9182. p4l
  9183.  dc.w 0
  9184.  dc.w bpl5pth
  9185. p5h
  9186.  dc.w 0
  9187.  dc.w bpl5ptl
  9188. p5l
  9189.  dc.w 0
  9190.  dc.w bpl6pth
  9191. p6h
  9192.  dc.w 0
  9193.  dc.w bpl6ptl
  9194. p6l
  9195.  dc.w 0
  9196.  dc.w bpl7pth
  9197. p7h
  9198.  dc.w 0
  9199.  dc.w bpl7ptl
  9200. p7l
  9201.  dc.w 0
  9202.  dc.w bpl8pth
  9203. p8h
  9204.  dc.w 0
  9205.  dc.w bpl8ptl
  9206. p8l
  9207.  dc.w 0
  9208.  
  9209.  
  9210.  dc.w ddfstart,$38
  9211.  dc.w ddfstop,$b8
  9212.  dc.w diwstart,$2c81
  9213.  dc.w diwstop,$2cc1
  9214.  
  9215.  dc.w bplcon0
  9216. Panelcon: dc.w $0211
  9217.  dc.w bpl1pth
  9218. p1h
  9219.  dc.w 0
  9220.  
  9221.  dc.w bpl1ptl
  9222. p1l
  9223.  dc.w 0
  9224.  
  9225.  
  9226.  dc.w $108,40*7
  9227.  dc.w $10a,40*7
  9228.  
  9229.  dc.w $ffff,$fffe
  9230.  
  9231.  dc.w $180,$fff
  9232.  
  9233.  
  9234.  dc.w $f801,$ff00
  9235.  dc.w col1,$50
  9236.  dc.w $f901,$ff00
  9237.  dc.w col1,$90
  9238.  dc.w $fa01,$ff00
  9239.  dc.w col1,$f0
  9240.  dc.w $fb01,$ff00
  9241.  dc.w col1,$f0
  9242.  dc.w $fc01,$ff00
  9243.  dc.w col1,$90
  9244.  dc.w $fd01,$ff00
  9245.  dc.w col1,$50
  9246.  
  9247.  dc.w $fe01,$ff00
  9248.  dc.w col1,$fff
  9249.  
  9250.  dc.w $ffdf,$fffe
  9251.  dc.w $a01,$ff00
  9252.  dc.w bplcon0,$201
  9253.  
  9254.  incbin "faces2cols"
  9255.  dc.w bpl1pth
  9256. f1h
  9257.  dc.w 0
  9258.  
  9259.  dc.w bpl1ptl
  9260. f1l
  9261.  dc.w 0
  9262.  
  9263.  dc.w bpl2pth
  9264. f2h
  9265.  dc.w 0
  9266.  
  9267.  dc.w bpl2ptl
  9268. f2l
  9269.  dc.w 0
  9270.  
  9271.  dc.w bpl3pth
  9272. f3h
  9273.  dc.w 0
  9274.  
  9275.  dc.w bpl3ptl
  9276. f3l
  9277.  dc.w 0
  9278.  
  9279.  dc.w bpl4pth
  9280. f4h
  9281.  dc.w 0
  9282.  dc.w bpl4ptl
  9283. f4l
  9284.  dc.w 0
  9285.  
  9286.  dc.w bpl5pth
  9287. f5h
  9288.  dc.w 0
  9289.  dc.w bpl5ptl
  9290. f5l
  9291.  dc.w 0
  9292.  
  9293.  dc.w $0c01,$ff00
  9294.  dc.w bplcon0,$5201
  9295.   
  9296.  dc.w $ffff,$fffe
  9297.  
  9298.  cnop 0,64
  9299. FacePlace:
  9300. ; ds.l 6*32*5
  9301.  
  9302. TEXTSCRN: dc.l 0
  9303.  
  9304. TEXTCOP:
  9305.  dc.w intreq,$8030
  9306.  
  9307.  dc.w spr0ptl
  9308. txs0l:
  9309.  dc.w 0
  9310.  dc.w spr0pth
  9311. txs0h:
  9312.  dc.w 0
  9313.  dc.w spr1ptl
  9314. txs1l:
  9315.  dc.w 0
  9316.  dc.w spr1pth
  9317. txs1h:
  9318.  dc.w 0
  9319.  dc.w spr2ptl
  9320. txs2l:
  9321.  dc.w 0
  9322.  dc.w spr2pth
  9323. txs2h:
  9324.  dc.w 0
  9325.  dc.w spr3ptl
  9326. txs3l:
  9327.  dc.w 0
  9328.  dc.w spr3pth
  9329. txs3h:
  9330.  dc.w 0
  9331.  dc.w spr4ptl
  9332. txs4l:
  9333.  dc.w 0
  9334.  dc.w spr4pth
  9335. txs4h:
  9336.  dc.w 0
  9337.  dc.w spr5ptl
  9338. txs5l:
  9339.  dc.w 0
  9340.  dc.w spr5pth
  9341. txs5h:
  9342.  dc.w 0
  9343.  dc.w spr6ptl
  9344. txs6l:
  9345.  dc.w 0
  9346.  dc.w spr6pth
  9347. txs6h:
  9348.  dc.w 0
  9349.  dc.w spr7ptl
  9350. txs7l:
  9351.  dc.w 0
  9352.  dc.w spr7pth
  9353. txs7h:
  9354.  dc.w 0
  9355.  
  9356.  
  9357.  dc.w $10c,$0088
  9358.  
  9359.         dc.w    $1fc,%00000000001111
  9360.  
  9361. ; dc.w $1fc,$f
  9362.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9363.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9364.  dc.w ddfstart,$38      ; Data fetch start.
  9365.  dc.w ddfstop,$c8       ; Data fetch stop.
  9366.  
  9367.  dc.w bplcon0
  9368. TSCP:
  9369.  dc.w $9201
  9370.  
  9371.  dc.w $106,$c40
  9372.  
  9373.  dc.w $2a01,$ff00
  9374.  
  9375.  dc.w col0,0
  9376.  dc.w col1
  9377. TOPLET:
  9378. TXTCOLL:
  9379.  dc.w 0
  9380.   dc.w col2
  9381. BOTLET:
  9382.  dc.w 0
  9383.  dc.w col3
  9384. ALLTEXT:
  9385.  dc.w $fff
  9386.  dc.w $106,$e40
  9387.  dc.w col3
  9388. ALLTEXTLOW:
  9389.  dc.w $0
  9390.  
  9391.  
  9392.  dc.w bpl1pth
  9393. TSPTh:
  9394.  dc.w 0
  9395.  dc.w bpl1ptl
  9396. TSPTl:
  9397.  dc.w 0
  9398.  
  9399.  dc.w bpl2pth
  9400. TSPTh2:
  9401.  dc.w 0
  9402.  dc.w bpl2ptl
  9403. TSPTl2:
  9404.  dc.w 0
  9405.  
  9406.  
  9407.  dc.w $108,0
  9408.  dc.w $10a,0
  9409.  
  9410.  dc.w $ffff,$fffe
  9411.  
  9412. ********************************************
  9413. * Stuff you don't have to worry about yet. *
  9414. ********************************************
  9415.  
  9416. closeeverything:
  9417.  
  9418.  jsr mt_end
  9419.  
  9420.  move.l #nullcop,d0
  9421. ; move.l old,d0
  9422.  
  9423.  move.l #$dff000,a6
  9424.  move.l d0,$dff080     ; Restore old copper list.
  9425.  move.w d0,ocl
  9426.  swap d0
  9427.  move.w d0,och
  9428.  
  9429.  move.w #3,d0
  9430. nonewvbl
  9431.  btst #5,intreqrl(a6)
  9432.  beq.s nonewvbl
  9433.  move.w #$20,intreq(a6)
  9434.  dbra d0,nonewvbl
  9435.  
  9436.  move.w #$8020,dmacon(a6)
  9437.  move.w #$f,dmacon(a6)
  9438.  
  9439.  move.l 4.w,a6
  9440.  lea VBLANKInt,a1
  9441.  moveq #INTB_COPER,d0
  9442.  jsr _LVORemIntServer(a6)
  9443.  
  9444.  IFEQ CD32VER
  9445.  move.l OLDKINT,$68.w
  9446.  ENDC
  9447.  move.w saveinters,d0
  9448.  or.w #$c000,d0
  9449.  move.w d0,intena(a6)
  9450.  clr.w $dff0a8
  9451.  clr.w $dff0b8
  9452.  clr.w $dff0c8
  9453.  clr.w $dff0d8
  9454.  
  9455.  
  9456. ; move.l oldview,a1
  9457. ; move.l a1,d0
  9458. ; move.l gfxbase,a6
  9459. ; jsr -$de(a6)
  9460.  
  9461. ; cmp.b #'s',mors
  9462. ; beq.s leaveold
  9463. ; move.w #$f8e,$dff1dc
  9464. ;leaveold:
  9465.  
  9466.  jsr RELEASELEVELMEM
  9467.  jsr RELEASESCRNMEM
  9468.  
  9469.  move.l #0,d0
  9470.  
  9471.  rts
  9472.  
  9473.  
  9474.  
  9475. intbase: dc.l 0
  9476. gfxbase: dc.l 0
  9477. oldview: dc.l 0
  9478.  
  9479. stuff:
  9480.  
  9481.     PRSDL
  9482.     Lea    gfxname(pc),a1    
  9483.     Moveq.l    #0,d0
  9484.     Move.l    $4.w,a6    
  9485.     Jsr    -$228(a6)
  9486.     add.w d1,RVAL1
  9487.     Move.l     d0,gfxbase
  9488.     Move.l    d0,a6                Use As Base Reg
  9489.     Move.l    34(a6),oldview
  9490.     move.l 38(a6),old
  9491.     rts
  9492.  
  9493. gfxname dc.b "graphics.library",0
  9494.  even
  9495. INTUNAME    dc.b    "intuition.library",0
  9496.  
  9497.  even
  9498.  
  9499.  
  9500.  cnop 0,64
  9501.  
  9502. Panel:
  9503.  dc.l 0
  9504.  
  9505. TimerScr: 
  9506. ;ds.b 40*64
  9507.  
  9508. scrntab:
  9509.  ds.b 16
  9510. val SET 32
  9511.  REPT 96
  9512.  dc.b val,val,val
  9513. val SET val+1
  9514.  ENDR
  9515.  ds.b 16
  9516.  
  9517. smallscrntab:
  9518. val SET 32
  9519.  REPT 96
  9520.  dc.b val,val
  9521. val SET val+1
  9522.  ENDR
  9523.  
  9524.  cnop 0,64
  9525. scrn:
  9526.  
  9527.  dcb.l 8,$33333333
  9528.  dc.l 0
  9529.  dc.l 0
  9530.  
  9531.  dcb.l 8,$0f0f0f0f
  9532.  dc.l 0
  9533.  dc.l 0
  9534.  
  9535.  dcb.l 8,$00ff00ff
  9536.  dc.l 0
  9537.  dc.l 0
  9538.  
  9539.  dcb.l 8,$0000ffff
  9540.  dc.l 0
  9541.  dc.l 0
  9542.  
  9543.  dc.l 0,-1,0,-1,0,-1,0,-1
  9544.  dc.l 0
  9545.  dc.l 0
  9546.  
  9547.  dc.l -1,-1,0,0,-1,-1,0,0
  9548.  dc.l 0
  9549.  dc.l 0
  9550.  
  9551.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9552.  dc.l 0
  9553.  dc.l 0
  9554.  
  9555. NumTimes: dc.l 0
  9556. TimeCount: dc.l 0
  9557. oldtime: dc.l 0
  9558. counting: dc.b 0
  9559. oktodisplay: dc.b 0
  9560.  
  9561. INITTIMER:
  9562.  move.l #0,TimeCount
  9563.  move.l #0,NumTimes
  9564.  rts
  9565.  
  9566. STARTCOUNT:
  9567.  move.l d0,-(a7)
  9568.  move.l $dff004,d0
  9569.  and.l #$1ffff,d0
  9570.  move.l d0,oldtime
  9571.  st counting
  9572.  move.l (a7)+,d0
  9573.  rts
  9574.  
  9575. STOPCOUNT:
  9576.  move.l d0,-(a7)
  9577.  move.l $dff004,d0
  9578.  and.l #$1ffff,d0
  9579.  
  9580.  sub.l oldtime,d0
  9581.  cmp.l #-256,d0
  9582.  bge.s okcount
  9583.  add.l #313*256,d0
  9584. okcount:
  9585.  add.l d0,TimeCount
  9586.  addq.l #1,NumTimes
  9587.  clr.b counting
  9588.  move.l (a7)+,d0
  9589.  rts
  9590.  
  9591. STOPCOUNTNOADD:
  9592.  move.l d0,-(a7)
  9593.  move.l $dff004,d0
  9594.  and.l #$1ffff,d0
  9595.  
  9596.  sub.l oldtime,d0
  9597.  cmp.l #-256,d0
  9598.  bge.s okcount2
  9599.  add.l #313*256,d0
  9600. okcount2:
  9601.  add.l d0,TimeCount
  9602.  clr.b counting
  9603.  move.l (a7)+,d0
  9604.  rts
  9605.  
  9606. maxbot: dc.w 0
  9607. tstneg: dc.l 0
  9608.  
  9609. STOPTIMER:
  9610.  st oktodisplay
  9611.  rts
  9612.  
  9613. digits: incbin "numbers.inc"
  9614.  
  9615.  
  9616.  Section Sounds,CODE_C
  9617.  
  9618. nullcop:
  9619.  dc.w $106,$c40
  9620.  dc.w $180,0 
  9621.  dc.w $100,$0
  9622.  dc.w $ffff,$fffe
  9623.  
  9624. Scream:
  9625. ; incbin "ab3:sounds/Scream"
  9626. ; ds.w 100
  9627. EndScream:
  9628. LowScream:
  9629. ; incbin "ab3:sounds/LowScream"
  9630. ; ds.w 100
  9631. EndLowScream:
  9632. BaddieGun:
  9633. ; incbin "ab3:sounds/BaddieGun"
  9634. EndBaddieGun:
  9635. bass:
  9636. ; incbin "ab3:sounds/backbass+drum"
  9637. bassend:
  9638. Shoot:
  9639. ; incbin "ab3:sounds/fire!"
  9640. EndShoot:
  9641. Munch:
  9642. ; incbin "ab3:sounds/munch"
  9643. EndMunch:
  9644. PooGun:
  9645. ; incbin "ab3:sounds/shoot.dm"
  9646. EndPooGun:
  9647. Collect:
  9648. ; incbin "ab3:sounds/collect"
  9649. EndCollect:
  9650. DoorNoise:
  9651. ; incbin "ab3:sounds/newdoor"
  9652. EndDoorNoise:
  9653. Stomp:
  9654. ; incbin "ab3:sounds/footstep3"
  9655. EndStomp:
  9656. SwitchNoise:
  9657. ; incbin "ab3:sounds/switch"
  9658. EndSwitch:
  9659. Reload:
  9660. ; incbin "ab3:sounds/switch1.SFX"
  9661. EndReload:
  9662. NoAmmo:
  9663. ; incbin "ab3:sounds/noammo"
  9664. EndNoAmmo:
  9665. Splotch:
  9666. ; incbin "ab3:sounds/splotch"
  9667. EndSplotch:
  9668. SplatPop:
  9669. ; incbin "ab3:sounds/splatpop"
  9670. EndSplatPop:
  9671. Boom:
  9672. ; incbin "ab3:sounds/boom"
  9673. EndBoom:
  9674. Hiss:
  9675. ; incbin "ab3:sounds/newhiss"
  9676. EndHiss:
  9677. Howl1:
  9678. ; incbin "ab3:sounds/howl1"
  9679. EndHowl1:
  9680. Howl2:
  9681. ; incbin "ab3:sounds/howl2"
  9682. EndHowl2:
  9683. Pant:
  9684. ; incbin "ab3:sounds/pant"
  9685. EndPant:
  9686. Whoosh:
  9687. ; incbin "ab3:sounds/whoosh"
  9688. EndWhoosh:
  9689. ROAR:
  9690. ; incbin "ab3:sounds/bigscream"
  9691. EndROAR
  9692. whoosh:
  9693. ; incbin "ab3:sounds/flame"
  9694. Endwhoosh:
  9695.  SECTION music,code_c
  9696.  
  9697. UseAllChannels: dc.w 0
  9698.  
  9699. mt_init:move.l    mt_data,a0
  9700.     move.l    a0,a1
  9701.     add.l    #$3b8,a1
  9702.     moveq    #$7f,d0
  9703.     moveq    #0,d1
  9704. mt_loop:move.l    d1,d2
  9705.     subq.w    #1,d0
  9706. mt_lop2:move.b    (a1)+,d1
  9707.     cmp.b    d2,d1
  9708.     bgt.s    mt_loop
  9709.     dbf    d0,mt_lop2
  9710.     addq.b    #1,d2
  9711.  
  9712.     lea    mt_samplestarts(pc),a1
  9713.     asl.l    #8,d2
  9714.     asl.l    #2,d2
  9715.     add.l    #$43c,d2
  9716.     add.l    a0,d2
  9717.     move.l    d2,a2
  9718.     moveq    #$1e,d0
  9719. mt_lop3:clr.l    (a2)
  9720.     move.l    a2,(a1)+
  9721.     moveq    #0,d1
  9722.     move.w    42(a0),d1
  9723.     asl.l    #1,d1
  9724.     add.l    d1,a2
  9725.     add.l    #$1e,a0
  9726.     dbf    d0,mt_lop3
  9727.  
  9728.     or.b    #$2,$bfe001
  9729.     move.b    #$6,mt_speed
  9730.     clr.w    $dff0a8
  9731.     clr.w    $dff0b8
  9732.     clr.w    $dff0c8
  9733.     clr.w    $dff0d8
  9734.     clr.b    mt_songpos
  9735.     clr.b    mt_counter
  9736.     clr.w    mt_pattpos
  9737.     rts
  9738.  
  9739. mt_end:    clr.w    $dff0a8
  9740.     clr.w    $dff0b8
  9741.     clr.w    $dff0c8
  9742.     clr.w    $dff0d8
  9743.     move.w    #$f,$dff096
  9744.     rts
  9745.  
  9746. mt_music:
  9747.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9748.     move.l    mt_data,a0
  9749.     addq.b    #$1,mt_counter
  9750.     move.b    mt_counter,D0
  9751.     cmp.b    mt_speed,D0
  9752.     blt.s    mt_nonew
  9753.     clr.b    mt_counter
  9754.     bra    mt_getnew
  9755.  
  9756. mt_nonew:
  9757.     lea    mt_voice1(pc),a6
  9758.     lea    $dff0a0,a5
  9759.     bsr    mt_checkcom
  9760.     lea    mt_voice2(pc),a6
  9761.     lea    $dff0b0,a5
  9762.     bsr    mt_checkcom
  9763.     tst.b UseAllChannels
  9764.     beq mt_endr
  9765.      lea    mt_voice3(pc),a6
  9766.     lea    $dff0c0,a5
  9767.     bsr    mt_checkcom
  9768.     lea    mt_voice4(pc),a6
  9769.     lea    $dff0d0,a5
  9770.     bsr    mt_checkcom
  9771.     bra    mt_endr
  9772.  
  9773. mt_arpeggio:
  9774.     moveq    #0,d0
  9775.     move.b    mt_counter,d0
  9776.     divs    #$3,d0
  9777.     swap    d0
  9778.     cmp.w    #$0,d0
  9779.     beq.s    mt_arp2
  9780.     cmp.w    #$2,d0
  9781.     beq.s    mt_arp1
  9782.  
  9783.     moveq    #0,d0
  9784.     move.b    $3(a6),d0
  9785.     lsr.b    #4,d0
  9786.     bra.s    mt_arp3
  9787. mt_arp1:moveq    #0,d0
  9788.     move.b    $3(a6),d0
  9789.     and.b    #$f,d0
  9790.     bra.s    mt_arp3
  9791. mt_arp2:move.w    $10(a6),d2
  9792.     bra.s    mt_arp4
  9793. mt_arp3:asl.w    #1,d0
  9794.     moveq    #0,d1
  9795.     move.w    $10(a6),d1
  9796.     lea    mt_periods(pc),a0
  9797.     moveq    #$24,d7
  9798. mt_arploop:
  9799.     move.w    (a0,d0.w),d2
  9800.     cmp.w    (a0),d1
  9801.     bge.s    mt_arp4
  9802.     addq.l    #2,a0
  9803.     dbf    d7,mt_arploop
  9804.     rts
  9805. mt_arp4:move.w    d2,$6(a5)
  9806.     rts
  9807.  
  9808. mt_getnew:
  9809.     move.l    mt_data,a0
  9810.     move.l    a0,a3
  9811.     move.l    a0,a2
  9812.     add.l    #$c,a3
  9813.     add.l    #$3b8,a2
  9814.     add.l    #$43c,a0
  9815.  
  9816.     moveq    #0,d0
  9817.     move.l    d0,d1
  9818.     move.b    mt_songpos,d0
  9819.     move.b    (a2,d0.w),d1
  9820.     asl.l    #8,d1
  9821.     asl.l    #2,d1
  9822.     add.w    mt_pattpos,d1
  9823.     clr.w    mt_dmacon
  9824.  
  9825.     lea    $dff0a0,a5
  9826.     lea    mt_voice1(pc),a6
  9827.     bsr    mt_playvoice
  9828.     lea    $dff0b0,a5
  9829.     lea    mt_voice2(pc),a6
  9830.     bsr    mt_playvoice
  9831.     tst.b UseAllChannels
  9832.     beq mt_setdma
  9833.     lea    $dff0c0,a5
  9834.     lea    mt_voice3(pc),a6
  9835.     bsr    mt_playvoice
  9836.     lea    $dff0d0,a5
  9837.     lea    mt_voice4(pc),a6
  9838.     bsr    mt_playvoice
  9839.     bra    mt_setdma
  9840.  
  9841. PROTCALC:
  9842. ;    include "ab3:source/protcalc.s"
  9843.     incbin "ab3:includes/protcalc.bin"
  9844. ENDPROTCALC:
  9845.  
  9846. mt_playvoice:
  9847.     move.l    (a0,d1.l),(a6)
  9848.     addq.l    #4,d1
  9849.     moveq    #0,d2
  9850.     move.b    $2(a6),d2
  9851.     and.b    #$f0,d2
  9852.     lsr.b    #4,d2
  9853.     move.b    (a6),d0
  9854.     and.b    #$f0,d0
  9855.     or.b    d0,d2
  9856.     tst.b    d2
  9857.     beq.s    mt_setregs
  9858.     moveq    #0,d3
  9859.     lea    mt_samplestarts(pc),a1
  9860.     move.l    d2,d4
  9861.     subq.l    #$1,d2
  9862.     asl.l    #2,d2
  9863.     mulu    #$1e,d4
  9864.     move.l    (a1,d2.l),$4(a6)
  9865.     move.w    (a3,d4.l),$8(a6)
  9866.     move.w    $2(a3,d4.l),$12(a6)
  9867.     move.w    $4(a3,d4.l),d3
  9868.     tst.w    d3
  9869.     beq.s    mt_noloop
  9870.     move.l    $4(a6),d2
  9871.     asl.w    #1,d3
  9872.     add.l    d3,d2
  9873.     move.l    d2,$a(a6)
  9874.     move.w    $4(a3,d4.l),d0
  9875.     add.w    $6(a3,d4.l),d0
  9876.     move.w    d0,8(a6)
  9877.     move.w    $6(a3,d4.l),$e(a6)
  9878.     move.w    $12(a6),d0
  9879.     asr.w #2,d0
  9880.     move.w d0,$8(a5)
  9881.     bra.s    mt_setregs
  9882. mt_noloop:
  9883.     move.l    $4(a6),d2
  9884.     add.l    d3,d2
  9885.     move.l    d2,$a(a6)
  9886.     move.w    $6(a3,d4.l),$e(a6)
  9887.     move.w    $12(a6),d0
  9888.     asr.w #2,d0
  9889.     move.w d0,$8(a5)
  9890. mt_setregs:
  9891.     move.w    (a6),d0
  9892.     and.w    #$fff,d0
  9893.     beq    mt_checkcom2
  9894.     move.b    $2(a6),d0
  9895.     and.b    #$F,d0
  9896.     cmp.b    #$3,d0
  9897.     bne.s    mt_setperiod
  9898.     bsr    mt_setmyport
  9899.     bra    mt_checkcom2
  9900. mt_setperiod:
  9901.     move.w    (a6),$10(a6)
  9902.     and.w    #$fff,$10(a6)
  9903.     move.w    $14(a6),d0
  9904.     move.w    d0,$dff096
  9905.     clr.b    $1b(a6)
  9906.  
  9907.     move.l    $4(a6),(a5)
  9908.     move.w    $8(a6),$4(a5)
  9909.     move.w    $10(a6),d0
  9910.     and.w    #$fff,d0
  9911.     move.w    d0,$6(a5)
  9912.     move.w    $14(a6),d0
  9913.     or.w    d0,mt_dmacon
  9914.     bra    mt_checkcom2
  9915.  
  9916. mt_setdma:
  9917.      move.w #250,d0
  9918. mt_wait:
  9919.      add.w #1,testchip
  9920.      dbra d0,mt_wait
  9921.     move.w    mt_dmacon,d0
  9922.     or.w    #$8000,d0
  9923.     and.w #%1111111111110011,d0
  9924.     move.w    d0,$dff096
  9925.     move.w #250,d0
  9926. mt_wait2:
  9927.     add.w #1,testchip
  9928.     dbra    d0,mt_wait2
  9929.     lea    $dff000,a5
  9930.     tst.b UseAllChannels
  9931.     beq.s noall
  9932.     lea    mt_voice4(pc),a6
  9933.     move.l    $a(a6),$d0(a5)
  9934.     move.w    $e(a6),$d4(a5)
  9935.     lea    mt_voice3(pc),a6
  9936.     move.l    $a(a6),$c0(a5)
  9937.     move.w    $e(a6),$c4(a5)
  9938. noall:
  9939.     lea    mt_voice2(pc),a6
  9940.     move.l    $a(a6),$b0(a5)
  9941.     move.w    $e(a6),$b4(a5)
  9942.     lea    mt_voice1(pc),a6
  9943.     move.l    $a(a6),$a0(a5)
  9944.     move.w    $e(a6),$a4(a5)
  9945.  
  9946.     add.w    #$10,mt_pattpos
  9947.     cmp.w    #$400,mt_pattpos
  9948.     bne.s    mt_endr
  9949. mt_nex:    clr.w    mt_pattpos
  9950.     clr.b    mt_break
  9951.     addq.b    #1,mt_songpos
  9952.     and.b    #$7f,mt_songpos
  9953.     move.b    mt_songpos,d1
  9954. ;    cmp.b    mt_data+$3b6,d1
  9955. ;    bne.s    mt_endr
  9956. ;    move.b    mt_data+$3b7,mt_songpos
  9957. mt_endr:tst.b    mt_break
  9958.     bne.s    mt_nex
  9959.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  9960.     rts
  9961.  
  9962. mt_setmyport:
  9963.     move.w    (a6),d2
  9964.     and.w    #$fff,d2
  9965.     move.w    d2,$18(a6)
  9966.     move.w    $10(a6),d0
  9967.     clr.b    $16(a6)
  9968.     cmp.w    d0,d2
  9969.     beq.s    mt_clrport
  9970.     bge.s    mt_rt
  9971.     move.b    #$1,$16(a6)
  9972.     rts
  9973. mt_clrport:
  9974.     clr.w    $18(a6)
  9975. mt_rt:    rts
  9976.  
  9977. CODESTORE: dc.l 0
  9978.  
  9979. mt_myport:
  9980.     move.b    $3(a6),d0
  9981.     beq.s    mt_myslide
  9982.     move.b    d0,$17(a6)
  9983.     clr.b    $3(a6)
  9984. mt_myslide:
  9985.     tst.w    $18(a6)
  9986.     beq.s    mt_rt
  9987.     moveq    #0,d0
  9988.     move.b    $17(a6),d0
  9989.     tst.b    $16(a6)
  9990.     bne.s    mt_mysub
  9991.     add.w    d0,$10(a6)
  9992.     move.w    $18(a6),d0
  9993.     cmp.w    $10(a6),d0
  9994.     bgt.s    mt_myok
  9995.     move.w    $18(a6),$10(a6)
  9996.     clr.w    $18(a6)
  9997. mt_myok:move.w    $10(a6),$6(a5)
  9998.     rts
  9999. mt_mysub:
  10000.     sub.w    d0,$10(a6)
  10001.     move.w    $18(a6),d0
  10002.     cmp.w    $10(a6),d0
  10003.     blt.s    mt_myok
  10004.     move.w    $18(a6),$10(a6)
  10005.     clr.w    $18(a6)
  10006.     move.w    $10(a6),$6(a5)
  10007.     rts
  10008.  
  10009. mt_vib:    move.b    $3(a6),d0
  10010.     beq.s    mt_vi
  10011.     move.b    d0,$1a(a6)
  10012.  
  10013. mt_vi:    move.b    $1b(a6),d0
  10014.     lea    mt_sin(pc),a4
  10015.     lsr.w    #$2,d0
  10016.     and.w    #$1f,d0
  10017.     moveq    #0,d2
  10018.     move.b    (a4,d0.w),d2
  10019.     move.b    $1a(a6),d0
  10020.     and.w    #$f,d0
  10021.     mulu    d0,d2
  10022.     lsr.w    #$6,d2
  10023.     move.w    $10(a6),d0
  10024.     tst.b    $1b(a6)
  10025.     bmi.s    mt_vibmin
  10026.     add.w    d2,d0
  10027.     bra.s    mt_vib2
  10028. mt_vibmin:
  10029.     sub.w    d2,d0
  10030. mt_vib2:move.w    d0,$6(a5)
  10031.     move.b    $1a(a6),d0
  10032.     lsr.w    #$2,d0
  10033.     and.w    #$3c,d0
  10034.     add.b    d0,$1b(a6)
  10035.     rts
  10036.  
  10037. mt_nop:    move.w    $10(a6),$6(a5)
  10038.     rts
  10039.  
  10040.  
  10041. mt_checkcom:
  10042.     move.w    $2(a6),d0
  10043.     and.w    #$fff,d0
  10044.     beq.s    mt_nop
  10045.     move.b    $2(a6),d0
  10046.     and.b    #$f,d0
  10047.     tst.b    d0
  10048.     beq    mt_arpeggio
  10049.     cmp.b    #$1,d0
  10050.     beq.s    mt_portup
  10051.     cmp.b    #$2,d0
  10052.     beq    mt_portdown
  10053.     cmp.b    #$3,d0
  10054.     beq    mt_myport
  10055.     cmp.b    #$4,d0
  10056.     beq    mt_vib
  10057.     move.w    $10(a6),$6(a5)
  10058.     cmp.b    #$a,d0
  10059.     beq.s    mt_volslide
  10060.     rts
  10061.  
  10062. mt_volslide:
  10063.     moveq    #0,d0
  10064.     move.b    $3(a6),d0
  10065.     lsr.b    #4,d0
  10066.     tst.b    d0
  10067.     beq.s    mt_voldown
  10068.     add.w    d0,$12(a6)
  10069.     cmp.w    #$40,$12(a6)
  10070.     bmi.s    mt_vol2
  10071.     move.w    #$40,$12(a6)
  10072. mt_vol2:move.w    $12(a6),d0
  10073.     asr.w #2,d0
  10074.     move.w d0,$8(a5)
  10075.     rts
  10076.  
  10077. mt_voldown:
  10078.     moveq    #0,d0
  10079.     move.b    $3(a6),d0
  10080.     and.b    #$f,d0
  10081.     sub.w    d0,$12(a6)
  10082.     bpl.s    mt_vol3
  10083.     clr.w    $12(a6)
  10084. mt_vol3:move.w    $12(a6),d0
  10085.     asr.w #2,d0
  10086.     move.w d0,$8(a5)
  10087.     rts
  10088.  
  10089. mt_portup:
  10090.     moveq    #0,d0
  10091.     move.b    $3(a6),d0
  10092.     sub.w    d0,$10(a6)
  10093.     move.w    $10(a6),d0
  10094.     and.w    #$fff,d0
  10095.     cmp.w    #$71,d0
  10096.     bpl.s    mt_por2
  10097.     and.w    #$f000,$10(a6)
  10098.     or.w    #$71,$10(a6)
  10099. mt_por2:move.w    $10(a6),d0
  10100.     and.w    #$fff,d0
  10101.     move.w    d0,$6(a5)
  10102.     rts
  10103.  
  10104. mt_portdown:
  10105.     clr.w    d0
  10106.     move.b    $3(a6),d0
  10107.     add.w    d0,$10(a6)
  10108.     move.w    $10(a6),d0
  10109.     and.w    #$fff,d0
  10110.     cmp.w    #$358,d0
  10111.     bmi.s    mt_por3
  10112.     and.w    #$f000,$10(a6)
  10113.     or.w    #$358,$10(a6)
  10114. mt_por3:move.w    $10(a6),d0
  10115.     and.w    #$fff,d0
  10116.     move.w    d0,$6(a5)
  10117.     rts
  10118.  
  10119. mt_checkcom2:
  10120.     move.b    $2(a6),d0
  10121.     and.b    #$f,d0
  10122.     cmp.b    #$e,d0
  10123.     beq.s    mt_setfilt
  10124.     cmp.b    #$d,d0
  10125.     beq.s    mt_pattbreak
  10126.     cmp.b    #$b,d0
  10127.     beq.s    mt_posjmp
  10128.     cmp.b    #$c,d0
  10129.     beq.s    mt_setvol
  10130.     cmp.b    #$f,d0
  10131.     beq.s    mt_setspeed
  10132.     rts
  10133.  
  10134. mt_setfilt:
  10135.     move.b    $3(a6),d0
  10136.     and.b    #$1,d0
  10137.     asl.b    #$1,d0
  10138.     and.b    #$fd,$bfe001
  10139.     or.b    d0,$bfe001
  10140.     rts
  10141. mt_pattbreak:
  10142.     not.b    mt_break
  10143.     rts
  10144. mt_posjmp:
  10145.     st reachedend
  10146.     move.b    $3(a6),d0
  10147.     subq.b    #$1,d0
  10148.     move.b    d0,mt_songpos
  10149.     not.b    mt_break
  10150.     rts
  10151. mt_setvol:
  10152.     cmp.b    #$40,$3(a6)
  10153.     ble.s    mt_vol4
  10154.     move.b    #$40,$3(a6)
  10155. mt_vol4:move.b    $3(a6),d0
  10156.     asr.w #2,d0
  10157.     move.w d0,$8(a5)
  10158.     rts
  10159. mt_setspeed:
  10160.     cmp.b    #$1f,$3(a6)
  10161.     ble.s    mt_sets
  10162.     move.b    #$1f,$3(a6)
  10163. mt_sets:move.b    $3(a6),d0
  10164.     beq.s    mt_rts2
  10165.     move.b    d0,mt_speed
  10166.     clr.b    mt_counter
  10167. mt_rts2:rts
  10168.  
  10169. mt_sin:
  10170.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10171.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10172.  
  10173. mt_periods:
  10174.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10175.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10176.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10177.  DC.w $007f,$0078,$0071,$0000,$0000
  10178.  
  10179. reachedend: dc.b 0
  10180. mt_speed:    DC.b    6
  10181. mt_songpos:    DC.b    0
  10182. mt_pattpos:    DC.w    0
  10183. mt_counter:    DC.b    0
  10184.  
  10185. mt_break:    DC.b    0
  10186. mt_dmacon:    DC.w    0
  10187. mt_samplestarts:DS.L    $1f
  10188. mt_voice1:    DS.w    10
  10189.         DC.w    1
  10190.         DS.w    3
  10191. mt_voice2:    DS.w    10
  10192.         DC.w    2
  10193.         DS.w    3
  10194. mt_voice3:    DS.w    10
  10195.         DC.w    4
  10196.         DS.w    3
  10197. mt_voice4:    DS.w    10
  10198.         DC.w    8
  10199.         DS.w    3
  10200.  
  10201. testchip: dc.w 0
  10202.  
  10203. ;/* End of File */
  10204. mt_data: dc.l 0
  10205. tstchip: dc.l 0
  10206.  include "SERIAL_NIGHTMARE"
  10207.  
  10208. ingame:
  10209. ; incbin "ab3:includes/ingame"
  10210. gameover: incbin "ab3:includes/gameover"
  10211. welldone: incbin "ab3:includes/welldone"
  10212.